Terraform AWS OpenSearch 使用 Cognito 模块循环问题

问题描述 投票:0回答:2

嗨,我正在尝试创建一个 terraform 模块来使用 cognito 部署 aws opensearch,但似乎无法完成!

要使用 Cognito 创建开放搜索集群,您需要创建

  • 认知用户池
  • cognito 用户池客户端应用程序
  • cognito 身份池(为其提供用户池和客户端应用程序)
  • 将用户池和身份池传递给opensearch

安装 opensearch 集群后,会创建一个新的客户端应用程序,然后您必须将其添加到身份池中!

任何人都知道如何绕过 terraform 部署 -> 手动更新。

[编辑]

添加了解决问题的代码片段,我没有附加用于使用 Cognito 部署开放搜索的起始代码,因为它有几百行代码,而且似乎是多余的。

## calls after elasticsearch and cognito has been built to
## add the elasticsearch client app to the cognito identity pool

data "external" "cognito" {
  depends_on = [
    aws_opensearch_domain.this
  ]
  program = ["sh", "-c", "aws cognito-idp list-user-pool-clients --user-pool-id ${aws_cognito_user_pool.cognito-user-pool.id}| jq '.UserPoolClients | .[] | select(.ClientName | contains(\"AmazonOpenSearchService\"))'"]
}
output "cognito" {
  value = data.external.cognito.result["ClientId"]
}

resource "aws_cognito_identity_pool" "cognito-identity-pool-opensearch" {
  depends_on = [
    data.external.cognito
  ]

  identity_pool_name               = "opensearch-${var.domain_name}-identity-pool"
  allow_unauthenticated_identities = false

  cognito_identity_providers {
    client_id               = data.external.cognito.result["ClientId"]
    provider_name           = aws_cognito_user_pool.cognito-user-pool.endpoint
    server_side_token_check = false
  }
}
terraform amazon-cognito amazon-opensearch
2个回答
2
投票

虽然你的问题应该提供一些示例代码,但我恰好知道你指的是什么,因为我必须在几个项目中处理它。

除非自从我上次处理这个问题以来情况发生了变化,否则没有简单的解决方案,而且这是 AWS API 和 Terraform AWS 提供商中的一个漏洞。我使用的解决方法是:

  1. 创建 OpenSearch 域并允许其创建 Cognito 用户池客户端应用程序。
  2. 使用外部数据源进行 AWS CLI 调用以读取 OpenSearch 域,这将为您提供其创建的客户端应用程序的详细信息。
  3. 使用外部数据源通过 AWS CLI 更新客户端应用程序并更改必要的设置。

这很糟糕,是的。


0
投票

terraform 代码已更新并且完全可以工作,无需任何恶作剧。

resource "aws_cognito_managed_user_pool_client" "OpenSearch-Cognito-Intergration_userPool" {
  name_pattern = "AmazonOpenSearchService-myproject"
  user_pool_id = aws_cognito_user_pool.testbuddy_cognito_user_pool.id

  depends_on = [
    aws_opensearch_domain.myproject-opensearch-domain-project_id
  ]
} 

请务必使用 name_pattern 而不是 name_prefix,因为 name_prefix 会给您带来“空结果”错误,因为您正在寻找由 AWS 而不是来自 IAC 制作的应用程序客户端。

尝试更新此页面以说明这一点https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cognito_driven_user_pool_client

© www.soinside.com 2019 - 2024. All rights reserved.