web-dev-qa-db-ja.com

Terraform、null_resource、local-exec、AWSCLIから出力を取得

Terraformを使用して、AWSでのCognitoIDプールのプロビジョニングを自動化しています。 AWSプロバイダーはまだCognitoをサポートしていないため、null_resourceとlocal-execを使用してAWSCLIを呼び出しています。

私は次のリソースを持っています:

resource "null_resource" "create-identitypool" {
    provisioner "local-exec" {
        command = "aws cognito-identity create-identity-pool --identity-pool-name terraform_identitypool --no-allow-unauthenticated-identities --developer-provider-name login.terraform.myapp"
    }
}

これにより、次の出力が得られます。

null_resource.create-identitypool (local-exec): {
null_resource.create-identitypool (local-exec):     "IdentityPoolId": "eu-west-1:22549ad3-1611-......",
null_resource.create-identitypool (local-exec):     "AllowUnauthenticatedIdentities": false,
null_resource.create-identitypool (local-exec):     "DeveloperProviderName": "login.terraform.myapp",
null_resource.create-identitypool (local-exec):     "IdentityPoolName": "terraform_identitypool"
null_resource.create-identitypool (local-exec): }
null_resource.create-identitypool: Creation complete

次のステップは、私がすでに作成したいくつかのロールをIDプールに追加することです。

resource "null_resource" "attach-policies-identitypool" {
    provisioner "local-exec" {
        command = "aws cognito-identity set-identity-pool-roles --identity-pool-id ${null_resource.create-identitypool.IdentityPoolId} --roles authenticated=authroleXXX,unauthenticated=unauthroleXXX"
    }
}

問題は、2番目のリソースで使用するIdentityPoolId $ {null_resource.create-identitypool.IdentityPoolId}を抽出できないことです。 null_resourceには出力属性がないことを理解しているので、コマンドライン出力からこのJSONオブジェクトを取得するにはどうすればよいですか。また、ティガーを使用してaws cognito-identity list-identity-poolsを実行し、場合によってはdelete-identity-poolを実行して、これをすべて繰り返し可能にし、そこから出力も必要にします。

何か案は?そして、どこかでこの情報を見逃してしまった場合はお詫びします。 Terraformメーリングリストでもこの質問をしましたが、もっと多くの人に見てもらいたいと思いました。

ありがとう、ティム

8
big_tommy_7bb

Terraform0.8には新しいデータソースexternalがあり、外部コマンドを実行して出力を抽出できます。見る - data.external

データソースは、Cognitoデータの実行ではなく、取得にonly使用する必要があります。これはTerraformデータソースであるため、副作用はありません。

4
Paul Tyng