Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TerraformでAWS環境を構築する際のハマりどころ

 TerraformでAWS環境を構築する際のハマりどころ

2fd6b60767da65f56156b5f703e4e2bb?s=128

Yuki_Kurono

April 11, 2022
Tweet

More Decks by Yuki_Kurono

Other Decks in Technology

Transcript

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

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

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

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

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

    assume_role_policy = <<EOF ~略~ EOF } #ポリシー data "aws_iam_policy" "kurono-policy-test-policy" { arn = "arn:aws:iam::123456789:policy/kurono-policy-test-policy" } #ポリシーアタッチ resource "aws_iam_policy_attachment" "lambda-execute" { name = "lambda-execute" roles = [aws_iam_role.lambda_role.name] policy_arn = data.aws_iam_policy.kurono-policy-test-policy.arn }
  6. 今の状態 AWS Cloud Terraform構築範囲 Role ポリシー Role アタッチ アタッチ

  7. 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 }
  8. Terraform destroyを実行 AWS Cloud Terraform構築範囲 Role ポリシー Role デタッチ デタッチ

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

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

    assume_role_policy = <<EOF ~略~ EOF } #ポリシー data "aws_iam_policy" "kurono-policy-test-policy" { arn = "arn:aws:iam::123456789:policy/kurono-policy-test-policy" } #ポリシーアタッチ resource "aws_iam_policy_attachment" "lambda-execute" { name = "lambda-execute" roles = [aws_iam_role.lambda_role.name] policy_arn = data.aws_iam_policy.kurono-policy-test-policy.arn }
  11. 既に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に修正して再デプロイ
  12. まとめ • 公式ドキュメントはちゃんと読もう • Terraformを使用して本番環境を作成する際は知見のある人と一緒に • 調べるのにも限界があるので • ハマりどころは一部あるかと思いますが、とても便利で楽しいので 是非使ってみてください!

  13. 参考 ・ 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