申请 Terraform 的最简单方式
首先
上次,我在文章中以AWS CDK为例,简单介绍了如何部署并创建IAM用户。
这次我尝试用Terraform做了同样的事情。
请参考
我参考了以下网站。
计划中的事项
-
- Cloud9
t3.smallで作りました
デフォルトVPC上
Terraform用、IAMユーザ
程序
安装tfenv
由于Terraform的版本经常变动,所以我安装了可以进行版本管理的tfenv。
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
sudo ln -s ~/.tfenv/bin/* /usr/local/bin
# シンボリックリンクができているか確認
ll /usr/local/bin/terraform
ll /usr/local/bin/tfenv
安装Terraform
# 使用可能バージョン一覧
tfenv list-remote
# 後日TFLintを入れることを想定して、下記バージョン(今回はTFLintはインストールしない)
tfenv install 1.1.0
tfenv use 1.1.0
tfenv list
执行流程
创建项目目录
mkdir test-terraform
cd test-terraform/
编写代码
# アクセスキーとシークレットキーを扱う変数
# 今回は、環境変数で与える
variable "access_key" {}
variable "secret_key" {}
terraform {
# AWSプロバイダーのバージョン
required_providers {
aws = {
source = "hashicorp/aws"
version = "~>4.8.0"
}
}
}
# AWSプロバイダを定義
provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "ap-northeast-1"
}
# IAMユーザ作成
resource "aws_iam_user" "lb" {
name = "Komichi-Akebi"
}
文件夹的结构如下所示。
尽管接下来的命令会生成许多文件,但当前时点只有这些。
test-terraform
└── main.tf
执行 (shí
# 環境変数にアクセスキーとシークレットキーを代入
# Terraformの変数として扱う場合は、"TF_VAR_"という接頭辞を付ける
export TF_VAR_access_key="<<aws_access_key_id>>"
export TF_VAR_secret_key="<<aws_secret_access_key>>"
# 初期化
terraform init
# コードをフォーマットし、見栄えを揃える
terraform fmt -recursive
terraform fmt -recursive -check
# 構文エラーを確認
terraform validate
# 実行計画確認
terraform plan
# 作成
terraform apply
与AWS CDK不同,CloudFormation上没有相应的堆栈。
改变构成
删除构造
如果要删除,可以使用以下命令。
terraform destroy
创建的资源将被删除。
關於這個話題,我想多說幾句。
Cloud9具有与控制台登录用户相同权限的机制。
我尝试使用此机制生成的密钥来替代在Terraform提供程序中指定的IAM用户。
您可以在cat ~/.aws/credentials命令下查看密钥信息。(但是这些信息会在一段时间后被替换为另一个密钥。到那时可能会有一些问题…)
当将它们指定为环境变量并执行terraform计划时,(不出意外地)会出现错误,并显示以下消息。
╷
│ Error: error configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, api error InvalidClientTokenId: The security token included in the request is invalid.
│
│ with provider["registry.terraform.io/hashicorp/aws"],
│ on main.tf line 14, in provider "aws":
│ 14: provider "aws" {
│
╵
由于Cloud9的原因,Terraform无法使用。
似乎需要创建一个类似我在解释时提到的专用IAM用户。
最后
这次我整理了一个使用Terraform创建简单配置的例子。
以前我对Terraform有一种难以入门的印象,但实际使用之后发现并非如此。
希望对即将接触Terraform的人有所帮助。
参考资料:Terraform的AWS提供商参考文档
作为以后可能会使用的备忘录。