嗨,我正在尝试创建一个 terraform 模块来使用 cognito 部署 aws opensearch,但似乎无法完成!
要使用 Cognito 创建开放搜索集群,您需要创建
安装 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
}
}
虽然你的问题应该提供一些示例代码,但我恰好知道你指的是什么,因为我必须在几个项目中处理它。
除非自从我上次处理这个问题以来情况发生了变化,否则没有简单的解决方案,而且这是 AWS API 和 Terraform AWS 提供商中的一个漏洞。我使用的解决方法是:
这很糟糕,是的。
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