我想使用Terraform创建一个测试用户的AWS认知用户池。创建用户池非常简单:
resource "aws_cognito_user_pool" "users" {
name = "${var.cognito_user_pool_name}"
admin_create_user_config {
allow_admin_create_user_only = true
unused_account_validity_days = 7
}
}但是,我找不到创建AWS认知用户的资源。它可以用AWS Cli完成
aws cognito-idp admin-create-user --user-pool-id <value> --username <value>知道怎么用Terraform来做吗?
发布于 2019-03-11 08:34:22
目前,这在Terraform中是不可能的,因为没有在用户池中创建用户的资源。
有一个公开发行请求这个特性,但是还没有开始它的工作。
发布于 2019-09-26 17:06:30
为了实现自动化,可以使用资源和local_exec提供程序在terraform中执行aws cli命令。
例如:
resource "aws_cognito_user_pool" "pool" {
name = "mypool"
}
resource "null_resource" "cognito_user" {
triggers = {
user_pool_id = aws_cognito_user_pool.pool.id
}
provisioner "local-exec" {
command = "aws cognito-idp admin-create-user --user-pool-id ${aws_cognito_user_pool.pool.id} --username myuser"
}
}发布于 2020-09-25 14:30:05
由于不可能直接通过Terraform (与matusko解决方案相反)来实现这一点,所以我建议使用CloudFormation模板。
在我看来,它更优雅,因为:
使用模板的简单解决方案如下所示。请记住,我没有跳过像provider这样的直接相关的文件和资源。示例还包含与组连接的用户。
variables.tf
variable "COGITO_USERS_MAIL" {
type = string
description = "On this mail passwords for example users will be sent. It is only method I know for receiving password after automatic user creation."
}cf_template.json
{
"Resources" : {
"userFoo": {
"Type" : "AWS::Cognito::UserPoolUser",
"Properties" : {
"UserAttributes" : [
{ "Name": "email", "Value": "${users_mail}"}
],
"Username" : "foo",
"UserPoolId" : "${user_pool_id}"
}
},
"groupFooAdmin": {
"Type" : "AWS::Cognito::UserPoolUserToGroupAttachment",
"Properties" : {
"GroupName" : "${user_pool_group_admin}",
"Username" : "foo",
"UserPoolId" : "${user_pool_id}"
},
"DependsOn" : "userFoo"
}
}
}cognito.tf
resource "aws_cognito_user_pool" "user_pool" {
name = "cogito-user-pool-name"
}
resource "aws_cognito_user_pool_domain" "user_pool_domain" {
domain = "somedomain"
user_pool_id = aws_cognito_user_pool.user_pool.id
}
resource "aws_cognito_user_group" "admin" {
name = "admin"
user_pool_id = aws_cognito_user_pool.user_pool.id
}user_init.tf
data "template_file" "application_bootstrap" {
template = file("${path.module}/cf_template.json")
vars = {
user_pool_id = aws_cognito_user_pool.user_pool.id
users_mail = var.COGNITO_USERS_MAIL
user_pool_group_admin = aws_cognito_user_group.admin.name
}
}
resource "aws_cloudformation_stack" "test_users" {
name = "${var.TAG_PROJECT}-test-users"
template_body = data.template_file.application_bootstrap.rendered
}源
示例简单项目基于:
对ELB和Spring进行安全检查。这意味着ELB不能将未经授权的用户传递给应用程序。应用程序可以根据映射到认知角色的PostgreSQL角色进行进一步的安全检查。
Terraform项目和简单应用程序:
如何在terraform存储库的README.MD中运行它的更多信息。
https://stackoverflow.com/questions/55087715
复制相似问题