申请 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
image.png
image.png

与AWS CDK不同,CloudFormation上没有相应的堆栈。

改变构成

image.png
image.png

删除构造

如果要删除,可以使用以下命令。

terraform destroy
image.png

创建的资源将被删除。

關於這個話題,我想多說幾句。

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提供商参考文档

作为以后可能会使用的备忘录。

 

广告
将在 10 秒后关闭
bannerAds