首次使用 Terraform【设置篇】

首先

我以前在AWS管理控制台上使用ECS/Fargate配置来托管应用程序。现在,我已经使用了Terraform将基础设施转化为代码。作为成果,我将发布一篇文章。

在本文中,总结了在编写terraform代码之前进行的设置操作。

与AWS资源生成相关的terraform代码是在另一篇文章中进行了整理。

利用技术

    • Terraform: 1.1.2

 

    MacOS: Catalina 10.15.7

安装步骤

    1. 创建IAM用户

 

    1. 在AWS CLI中设置两组身份验证信息

 

    1. 安装terraform

 

    1. 安装git secrets

 

    1. 安装VScode扩展功能

 

    创建目录并编写基本代码

1. 创建IAM用户

首先,在AWS管理控制台上创建以下两个IAM用户。

    1. 管理者使用者

 

    Terraform使用者

请注意以下事项:
我们将为所有用户授予AdministratorAccess权限。

在下面的操作中,假设管理员用户已经被创建,并且只需在AWS管理控制台上创建Terraform用户。

在IAM界面上,从侧边栏选择用户,并点击添加用户。

スクリーンショット 2022-01-02 8.14.18.png

請輸入任意的使用者名稱,將認證資訊類型設定為存取金鑰。

スクリーンショット 2022-01-02 8.15.42.png

为了给用户授予AWS官方权限,选择直接附加现有策略,并勾选显示在最顶端的AdministratorAccess,然后继续。

スクリーンショット 2022-01-02 8.16.29.png

在下一個畫面中有標籤名稱的設定,忽略它並繼續進行到用戶創建。

用户创建完成后,将会显示如下画面,请将访问密钥ID和秘密访问密钥复制到文本编辑器中备份。

スクリーンショット 2022-01-02 8.20.11.png
    在AWS CLI中设置两组认证信息

接下来,我们将逐个为每个用户注册AWS CLI。

在我的情况下,由于管理员用户已经注册过了,
所以已经显示了注册的ID和Key。

Terraform给用户提供了一个带有profile选项的名称,以便进行识别。

另外,我将按照以下方式回答各种问题。


# 管理者用ユーザー
% aws configure

# 既に登録済みであれば、IDやKeyが表示されます。
AWS Access Key ID [****************AAAA]: 
AWS Secret Access Key [****************BBBB]: 
Default region name [ap-northeast-1]: 
Default output format [json]:


# Terraform用ユーザー
% aws configure --profile terraform

AWS Access Key ID [none]: アクセスキーIDをコピペ
AWS Secret Access Key [none]: シークレットアクセスキーをコピペ
Default region name [none]: ap-northeast-1
Default output format [none]: json

在完成输入后,从Finder中找到/Users/用户名/.aws/credentials,并确认是否已成功注册。


[default]
aws_access_key_id = AKI***************
aws_secret_access_key = ***********************
[terraform]
aws_access_key_id = AKI***************
aws_secret_access_key = ***********************

3. 安装terraform

首先,安装Terraform的包管理器tfenv。

在安装之前,请先指定Terraform的版本。

现在,让我们在终端上执行吧。


# tfenvのインストール
% brew install tfenv

# tfenvがインストールできているか確認する
% tfenv -v

# インストール可能なterraformバージョンを表示させる
% tfenv list-remote

# terraformのバージョン1.1.2を指定してインストール
% tfenv install 1.1.2

# インストール済みのterraformから指定バージョンを選ぶ
% tfenv use 1.1.2

# 現在使用しているバージョンを確認する
% tfenv list

# Terraform自体のバージョンも念のため確認する
% terraform -v

4. 安装git secrets

下一步,安装git secrets来确保AWS凭证信息不会外泄。

通过引入这个,你可以限制git commit命令,以防止AWS秘密访问密钥等机密信息在GitHub上公开。

在Mac的情况下,您可以通过Homebrew来进行安装。


# git-secretsをインストール
% brew install git-secrets

# AWS秘匿情報の流失を阻止する設定
% git init
% git secrets --install
% git secrets --register-aws

作为验证,将一个虚假的credencial文件放入存在.git的存储库中。


# git secretsが機能しそうな情報を入れてみる
[default]
aws_access_key_id = AKIAAAAAAAAAAAAAAAAA
aws_secret_access_key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

保存完验证文件后,尝试提交时出现错误,git secrets 提示包含 AWS 机密信息。


# 検証としてコミットまでしてみる
% git add .
% git commit -m "AWS秘匿情報が含まれている為、commitできない"

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- List your configured allowed patterns in .gitallowed at repository's root directory
- Use --no-verify if this is a one-time false positive

在Git的init阶段,设置自动安装secret。


# git initコマンドを実行すると、git secret --installコマンドも動作する
% git secrets --install ~/.git-templates/git-secrets
% git config --global init.templatedir '~/.git-templates/git-secrets'

导入VScode扩展功能

在VScode文本编辑器中,引入Hashicorp公司的官方扩展功能。

スクリーンショット 2022-01-02 11.22.00.png

6. 创建目录/文件

在编写terraform代码之前,先整理每个目录/文件。

1. 主.tf: 设定terraform/提供程序/变量
2. terraform.tfvars: 设定变量的值
3. .gitignore: 设定要忽略Git历史的文件
4. modules/各目录/主.tf: 为了方便创建部分资源,如IAM角色,使用模块

将上述目录和文件创建在terraform用目录中。

为了表示目录结构,
以下是通过homebrew安装tree,
并执行tree命令。


# treeをインストール
% brew install tree

# 対象ディレクトリに対して、treeコマンドの実行
% tree terraform_directory

terraform_directory
├── main.tf
├── modules
│   ├── iam_role
│   │   └── main.tf
│   └── security_group
│       └── main.tf
└── terraform.tfvars

以上是在实施Terraform之前完成准备工作的!

请参考相关的视频或书籍。

结束

使用Terraform创建AWS资源时,即使在删除时,也可以通过命令一次性删除,非常方便!

虽然在实际工作中可能无法自由地删除它们,但为了确保个人的投资组合不创建不必要的AWS资源而利用这些资源是值得的。

在前端使用Vue.js等技术,应用程序架构变得复杂起来后,
很可能需要对terraform进行编辑的呢…

bannerAds