如果一个人有两个 AWS 账户,一个用于开发,一个用于实时(例如),我知道可以使用 terraform 工作区来管理每个环境的状态。
但是,如果我将工作区从“开发”切换到“实时”,有没有办法告诉 terraform 它现在应该将状态应用于真实帐户而不是测试帐户?
我想到的一种容易出错的方法是secret.auto.tfvars每次切换工作区时交换我的文件,因为我认为在使用不同的访问密钥(属于“真实”帐户的密钥)运行时,AWS 提供商将应用到那个帐户。但是,很容易交换工作区并提供错误的凭据,这会针对错误的环境运行更改。
我正在寻找一种方法,几乎可以将工作区与 AWS 中的帐户 ID 关联起来。
我确实找到了这个https://github.com/hashicorp/terraform/issues/13700但它指的是已弃用的env命令,这个评论看起来特别有希望
我在 GitHub 上找到了一些信息,在那里我留下此评论作为对之前评论的回复,该评论建议考虑模块而不是工作区,实际上表明工作区不太适合此任务。如果有人可以提供有关如何使用模块来解决同时维护“相同”基础架构的多个版本的问题的信息,我很想看看这如何改进工作区概念。
如何使用 Terraform 设置 API Gateway 阶段级执行日志记录?还不支持吗?
API Gateway 阶段编辑器具有执行日志记录配置。但是,尽管它具有访问日志记录配置参数,但似乎没有参数可以在aws_api_gateway_stage 中设置它们。
想知道是否还有其他资源可以使用,或者只是那些参数尚未实现。
所以,我有一个 Aurora MySql 集群,其中配置了一个 RDS MySql 实例。AWS 底层 API 仅允许创建 1 个逻辑数据库,因此出现了障碍。因此,我想知道你们中是否有人已经有过这种部署的经验,因为我不想在这一步中使用 Mysql 客户端 CLI,如果可能的话,我真的想自动化它。有任何想法吗?
database amazon-web-services terraform amazon-aurora terraform-provider-aws
我遇到了以下要求,我需要将 Terraform 输出或 Terraform 动态创建的资源 ID 作为环境变量传递给同一 terraform 模板中的 Lambda 函数。
我的 terraform 创建了大量资源,例如 Lambda 函数、API 网关、网关方法、网关资源等。我需要将 API 网关资源 ID 作为环境变量发送到 Lambda 函数。不幸的是,我不能在 Lambda 函数中放置“Depends on”,因为它是创建循环依赖项。
无论如何,我们可以将这些动态创建的资源 ID 作为输入环境变量传递给 lambda 函数吗?
谢谢
我正在尝试使用 Terraform 0.12.0 创建 ACM 证书以应用于我的 Amazon ALB。我可以在没有证书的情况下创建我的 ALB,没有问题。整个基础架构堆栈按预期构建和部署。现在,我添加了以下代码来创建 Route 53 验证记录、请求证书并将其分配给新的 ALB 侦听器:
资源 "aws_route53_zone" "main" { name = "${var.zone_name}" }
resource "aws_route53_record" "validation" {
name = "${aws_acm_certificate.main.domain_validation_options.0.resource_record_name}"
type = "${aws_acm_certificate.main.domain_validation_options.0.resource_record_type}"
zone_id = "${aws_route53_zone.main.zone_id}"
records = ["${aws_acm_certificate.main.domain_validation_options.0.resource_record_value}"]
ttl = "60"
}
resource "aws_acm_certificate_validation" "main" {
certificate_arn = "${aws_acm_certificate.main.arn}"
validation_record_fqdns = "${aws_route53_record.validation.*.fqdn}"
}
resource "aws_alb_listener" "front_end_tls" {
load_balancer_arn = "${aws_alb.main.id}"
port = "443"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-2016–08"
certificate_arn = "${var.certificate_arn}"
default_action {
target_group_arn = "${aws_alb_target_group.main.id}"
type = "forward" …Run Code Online (Sandbox Code Playgroud) ssl-certificate amazon-web-services terraform aws-certificate-manager terraform-provider-aws
在我的main.tf我定义了一个空的 aws 提供程序
provider aws {}
Run Code Online (Sandbox Code Playgroud)
在没有环境变量的情况下,aws 提供程序[default]从~/.aws/credentials. 但是我仍然被提示输入该区域:
>terraform plan
provider.aws.region
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Enter a value:
Run Code Online (Sandbox Code Playgroud)
我怎样才能让 aws 提供者自动选择对应的区域到[default]中定义的凭证~/.aws/config?
我需要为 S3 存储桶创建触发器。我们使用以下内容来创建触发器:
resource "aws_s3_bucket_notification" "bucket_notification" {
bucket = var.aws_s3_bucket_id
lambda_function {
lambda_function_arn = var.lambda_function_arn
events = ["s3:ObjectCreated:Put"]
filter_prefix = var.filter_prefix
filter_suffix = var.filter_suffix
}
}
Run Code Online (Sandbox Code Playgroud)
当存储桶还没有触发器时,这可以正常工作,除生产之外的所有环境都是这种情况。当我们部署生产时,我们看到存储桶上已经存在的触发器被删除了。我们需要两个触发器。我能够手动添加另一个触发器,例如 PUT 事件触发器,只需更改前缀,但是当我从 Terraform 执行此操作时,前一个总是被删除。有什么我想念的吗?
amazon-s3 amazon-web-services terraform terraform-provider-aws
我正在与 Terraform V11 和 AWS 提供商合作;我正在寻找一种方法来防止在销毁阶段销毁少量资源。所以我使用了以下方法。
lifecycle {
prevent_destroy = true
}
Run Code Online (Sandbox Code Playgroud)
当我运行“terraform plan”时,出现以下错误。
the plan would destroy this resource, but it currently has
lifecycle.preven_destroy set to true. to avoid this error and continue with the plan.
either disable or adjust the scope.
Run Code Online (Sandbox Code Playgroud)
我正在寻找的只是一种避免在 destroy 命令期间破坏其中一个资源及其依赖项的方法。
我看过几个链接,但我必须看一个例子。我有:
resource "aws_iam_role" "role" {
name = "role"
assume_role_policy = <<-EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1590217939125",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::wwe"
},
{
"Sid": "Stmt1590217939125",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::wwe/*"
},
{
"Sid": "Stmt1577967806846",
"Action": [
"secretsmanager:DescribeSecret",
"secretsmanager:GetRandomPassword",
"secretsmanager:GetResourcePolicy",
"secretsmanager:GetSecretValue",
"secretsmanager:ListSecretVersionIds",
"secretsmanager:ListSecrets"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
EOF
tags = {
Name = wwe
Environment = STAGE
}
}
Run Code Online (Sandbox Code Playgroud)
当我在制作时,
terraform apply
Run Code Online (Sandbox Code Playgroud)
我看到这个:
# aws_iam_role.role will be created
+ resource "aws_iam_role" "role" …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-iam terraform terraform-provider-aws
我已经使用 terraform 将 ELK 堆栈部署到 AWS ECS。几个星期以来,一切都运行良好,但 2 天前我不得不重新启动实例。
遗憾的是,新实例并不依赖于现有卷来挂载根块设备。因此,我的 Kibana 实例无法再使用我的所有 elasticsearch 数据。
数据仍然在这里,在以前的卷上,目前没有使用。
所以我尝试了很多方法来将这个卷附加到“dev/xvda”,但没有例如:
我正在使用带有 aws_launch_configuration 的 aws_autoscaling_group。
resource "aws_launch_configuration" "XXX" {
name = "XXX"
image_id = data.aws_ami.latest_ecs.id
instance_type = var.INSTANCE_TYPE
security_groups = [var.SECURITY_GROUP_ID]
associate_public_ip_address = true
iam_instance_profile = "XXXXXX"
spot_price = "0.04"
lifecycle {
create_before_destroy = true
}
user_data = templatefile("${path.module}/ecs_agent_conf_options.tmpl",
{
cluster_name = aws_ecs_cluster.XXX.name
}
)
//The volume i want to reuse was created with this configuration. I though it …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-ecs terraform terraform-provider-aws
terraform ×9
amazon-ecs ×1
amazon-iam ×1
amazon-s3 ×1
aws-lambda ×1
aws-regions ×1
database ×1