2017-10-27 12 views
0

私はCI環境向けのユーザーを作成してECRに公開するTerraformモジュールを持っています。毎回aws_iam_access_keyを再作成するTerraform

resource "aws_iam_user" "continuous-deployment" { 
    name = "continuous-deployment" 
    path = "/system/" 
} 

resource "aws_iam_access_key" "continuous-deployment" { 
    user = "${aws_iam_user.continuous-deployment.name}" 
    pgp_key = "${var.pgp_key}" 
} 

resource "aws_iam_user_policy" "continuous-deployment" { 
    name = "continuous-deployment" 
    user = "${aws_iam_user.continuous-deployment.name}" 

    policy = <<EOF 
{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Action": [ 
      "ecr:GetAuthorizationToken", 
      "ecr:BatchCheckLayerAvailability", 
      "ecr:GetDownloadUrlForLayer", 
      "ecr:GetRepositoryPolicy", 
      "ecr:DescribeRepositories", 
      "ecr:ListImages", 
      "ecr:DescribeImages", 
      "ecr:BatchGetImage", 
      "ecr:InitiateLayerUpload", 
      "ecr:UploadLayerPart", 
      "ecr:CompleteLayerUpload", 
      "ecr:PutImage", 
      "ecr:GetLoginToken" 
     ], 
     "Effect": "Allow", 
     "Resource": "*" 
    } 
    ] 
} 
EOF 
} 

output "aws_access_key_id" { 
    value = "${aws_iam_access_key.continuous-deployment.id}" 
} 

output "aws_secret_access_key" { 
    value = "${aws_iam_access_key.continuous-deployment.encrypted_secret}" 
} 

私が午前問題は、各terraform applyに、テラフォームは、彼らが変更されていない場合でも、これらのリソースを削除して再作成したいということです。

なぜこのようなことが起こっているのか分かりませんが、残念なことに同じような立場にいる人は見つかりません。アイデア?

+1

'terraform plan'は、リソースを削除して再作成する理由を示す必要があります。 – Nickolay

+0

ポリシーが作成されたら、コンテンツをAWS Webコンソールに表示されているのと同じようにコピーし、スクリプトに貼り付けます –

答えて

0

これは、ほとんどの場合、一部のIAMポリシーまたはs3ポリシー定義で発生します。

terraform plan/applyを実行すると、一部のリソースを再作成する必要があることがエクスポートされ、ポリシーの変更が1行に表示され、変更を簡単に識別できなくなります。

terraformプランの出力をそれにリダイレクトし、きれいにソートされた出力を得るためにterraform-landscapeを使用してください。次に、どの部分を修正する必要があるのか​​を簡単に特定する必要があります。

gem install terraform_landscape 

terraform plan ... | landscape 
関連する問題