aws_caller_identity
doesn't actually callSTS GetCallerId endpointのように、必要な情報、具体的にはコマンドを実行しているユーザーのユーザーIDとユーザーIDを指定することができます。
代わりに、より簡単なオプションが使用され、AWSクライアントがすでに定義しているaccountid
を単に使用し、単にそれを返します。
ここには2つのオプションがあります。 aws_caller_identity
データソースがSTS GetCallerIdエンドポイントを実際に呼び出すようにプルリクエストを発生させるか、ローカルプロビジョナを使用してシェルを外してリソースにタグを付けることができます。
明らかに、Terraformが提供している生のリソースを直接使用するためにTerraformを作成しているのであれば、タグ付けされていないものを殺す以外に他の人のUserIdまたはArn。
あなたは、人々は、ソースが、あなたはEC2インスタンスを作成したモジュールで、このような醜い何かができる代わりに、それらを使用するモジュールの束を持っている代わりに、場合:
resource "aws_instance" "instance" {
ami = "ami-123456"
instance_type = "t2.micro"
tags {
Name = "HelloWorld"
}
lifecycle {
ignore_changes = [ "tags.Owner" ]
}
provisioner "local-exec" {
command = <<EOF
owner=`aws sts get-caller-identity --output text --query 'Arn' | cut -d"/" -f2`
aws ec2 create-tags --resources ${aws_instance.instance.id} --tags Key=Owner,Value=$${owner}
EOF
}
}
上記のテラフォームが作成されます。 EC2インスタンスを正常にした後、 "Owner"タグを無視します。インスタンスを作成すると、ユーザーのIAMアカウント名/ロールをフェッチし、その値を使用してインスタンスの「所有者」タグを作成するローカルシェルスクリプトが実行されます。
私を正しい軌道に乗せてくれてありがとう!私は 'aws_caller_identity'がアカウントに加えてARNのリソース部分を公開するようにPRを受けようとしています。それは私のユースケースには十分です。 – alanctgardner