21

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

次のリソースがあります。

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 オブジェクトを取得するにはどうすればよいですか。また、tirggers を使用して aws cognito-identity list-identity-pools を実行し、場合によっては delete-identity-pool を実行して、これをすべて繰り返し可能にし、そこからの出力も必要にします。

何か案は?また、この情報をどこかで見逃していた場合は、お詫び申し上げます。Terraform メーリング リストでもこの質問をしましたが、より多くの聴衆を対象にしようと思いました。

ありがとう、ティム

4

2 に答える 2

13

Terraform 0.8 には、external外部コマンドを実行して出力を抽出できる新しいデータ ソースがあります。を参照してくださいdata.external

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

于 2016-12-12T16:00:12.047 に答える