首页 > 解决方案 > 对资源 ID 的动态引用

问题描述

我有一个名为的变量cognito_user_pool并定义了两个资源。需要参数中aws_cognito_identity_pool的实例ID 。ID 是由 访问的,但问题是客户端名称保存在变量中。aws_cognito_user_pool_clientclient_idaws_cognito_user_pool_client.MY_CLIENT_NAME.idcognito_user_pool

我的问题是如何在不硬编码客户端名称的情况下获取 ID。

以下设置不起作用:

resource "aws_cognito_user_pool_client" "example" {
  name         = var.cognito_user_pool
  user_pool_id = aws_cognito_user_pool.pool.id
}

resource "aws_cognito_identity_pool" "main" {
  identity_pool_name               = var.cognito_user_pool
  allow_unauthenticated_identities = false

  cognito_identity_providers {
    client_id               = aws_cognito_user_pool_client[var.cognito_user_pool].id
    provider_name           = aws_cognito_user_pool.pool.endpoint
    server_side_token_check = false
  }
}

产生:

Error: Invalid reference

  on setup.tf line 26, in resource "aws_cognito_identity_pool" "main":
  26:     client_id               = aws_cognito_user_pool_client[var.cognito_user_pool]

A reference to a resource type must be followed by at least one attribute
access, specifying the resource name.

标签: terraformterraform-provider-aws

解决方案


但是客户端名称和客户端 ID 不一样。如果它是相同的,那么你可以只使用变量。

我认为问题在于您错误地访问/引用了客户端 ID。

里面的cognito_identity_providersresource "aws_cognito_identity_pool" "main"应该是:

  cognito_identity_providers {
    client_id               = aws_cognito_user_pool_client.example.id
    provider_name           = aws_cognito_user_pool.pool.endpoint
    server_side_token_check = false
  }

推荐阅读