首次使用 Terraform【设置篇】
首先
我以前在AWS管理控制台上使用ECS/Fargate配置来托管应用程序。现在,我已经使用了Terraform将基础设施转化为代码。作为成果,我将发布一篇文章。
在本文中,总结了在编写terraform代码之前进行的设置操作。
与AWS资源生成相关的terraform代码是在另一篇文章中进行了整理。
利用技术
-
- Terraform: 1.1.2
- MacOS: Catalina 10.15.7
安装步骤
-
- 创建IAM用户
-
- 在AWS CLI中设置两组身份验证信息
-
- 安装terraform
-
- 安装git secrets
-
- 安装VScode扩展功能
- 创建目录并编写基本代码
1. 创建IAM用户
首先,在AWS管理控制台上创建以下两个IAM用户。
-
- 管理者使用者
- Terraform使用者
请注意以下事项:
我们将为所有用户授予AdministratorAccess权限。
在下面的操作中,假设管理员用户已经被创建,并且只需在AWS管理控制台上创建Terraform用户。
在IAM界面上,从侧边栏选择用户,并点击添加用户。

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

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

在下一個畫面中有標籤名稱的設定,忽略它並繼續進行到用戶創建。
用户创建完成后,将会显示如下画面,请将访问密钥ID和秘密访问密钥复制到文本编辑器中备份。

- 在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公司的官方扩展功能。

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进行编辑的呢…