Slide 1

Slide 1 text

TerraformでAWS環境を構築する際のハマりどころ アイレット株式会社 黒野雄稀 JAWS-UG朝会 #32 2022/04/11

Slide 2

Slide 2 text

自己紹介 名前:黒野 雄稀 趣味:バイク(になりそう) AWS歴:3年くらい 所属:アイレット株式会社

Slide 3

Slide 3 text

https://www.terraform.io/ Terraform Terraformは、何百ものクラウドサービスを管理するた めの一貫したCLIワークフローを提供するコードソフト ウェアツールとしてのオープンソースインフラストラク チャです。 概要

Slide 4

Slide 4 text

IAM編 これだけだけど...

Slide 5

Slide 5 text

こんな感じでIAMのアタッチ # ロール resource "aws_iam_role" "lambda_role" { name = "kurono-policy-test-role" assume_role_policy = <

Slide 6

Slide 6 text

今の状態 AWS Cloud Terraform構築範囲 Role ポリシー Role アタッチ アタッチ

Slide 7

Slide 7 text

destroyの実行 root@kurono2:~/terraform# terraform destroy aws_iam_role.lambda_role: Refreshing state... [id=kurono-policy-test-role] aws_iam_policy_attachment.lambda-execute: Refreshing state... [id=lambda- execute] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: - destroy Terraform will perform the following actions: # aws_iam_policy_attachment.lambda-execute will be destroyed - resource "aws_iam_policy_attachment" "lambda-execute" { - groups = [] -> null - id = "lambda-execute" -> null - name = "lambda-execute" -> null - policy_arn = "arn:aws:iam::123456789:policy/kurono-policy-test- policy" -> null - roles = [ - "kurono-policy-test-role", - "kurono-policy-test-role-2", ] -> null - users = [] -> null }

Slide 8

Slide 8 text

Terraform destroyを実行 AWS Cloud Terraform構築範囲 Role ポリシー Role デタッチ デタッチ

Slide 9

Slide 9 text

どうすれば良かったのか 結論:aws_iam_role_policy_attachmentを使いましょう。 iam_policy_attachmentでは他のメカニズ ム(他のTerraformリソースを含む)を介し てアタッチされたポリシーを持つユー ザー/ロール/グループでさえ、 そのアタッチされたポリシーがこのリソー スによって取り消される可能性があると 記載があります。 https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy_attachment

Slide 10

Slide 10 text

こんな感じでIAMのアタッチ # ロール resource "aws_iam_role" "lambda_role" { name = "kurono-policy-test-role" assume_role_policy = <

Slide 11

Slide 11 text

既にaws_iam_policy_attachmentを使っている場合 $ terraform destroy 1.terraform state rmを実行してtfstateの対象から外してあげる 2.terraform destroyを実行してデタッチされないことを確認 $ terraform state rm aws_iam_policy_attachment.lambda-execute 3. aws_iam_role_policy_attachmentに修正して再デプロイ

Slide 12

Slide 12 text

まとめ • 公式ドキュメントはちゃんと読もう • Terraformを使用して本番環境を作成する際は知見のある人と一緒に • 調べるのにも限界があるので • ハマりどころは一部あるかと思いますが、とても便利で楽しいので 是非使ってみてください!

Slide 13

Slide 13 text

参考 ・ https://qiita.com/kurono/items/9ad5936accb3bf30df88 Qiita ・ https://registry.terraform.io/providers/hashicorp/aws/latest/docs Terraform AWS Provider ・https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy_attachment Resource: aws_iam_policy_attachment