Terraform - 根据条件创建或不创建资源

标签 terraform terraform-provider-aws

我需要在指定的环境中创建我的资源。例如,如果我有一个尚未准备好用于生产的 AWS Lambda,我需要它仅存在于开发环境中。有没有一个好的方法来做到这一点?我知道可以将 count 设置为 0,但我不确定如何将此决定级联到其他资源。

例如,我有一个 AWS Lambda 资源,并且计数 设置为 0。

resource "aws_lambda_function" "example_lambda" {
  count ? local.is_production ? 0 : 1
}

如何将此决策级联到依赖于上述 AWS Lambda 的其他资源?

假设我有一个将调用 Lambda 函数的 S3 存储桶。

resource "aws_s3_bucket" "example_bucket" {
  bucket = "bucket_name"
}

resource "aws_lambda_permission" "example_bucket_etl" {
  statement_id  = "AllowExecutionFromS3Bucket"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.example_lambda.arn
  principal     = "s3.amazonaws.com"
  source_arn    = aws_s3_bucket.example_bucket.arn
}

resource "aws_s3_bucket_notification" "bucket_notification" {
  bucket = aws_s3_bucket.example_bucket.id

  lambda_function {
    lambda_function_arn = aws_lambda_function.example_lambda.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "example_bucket/"
    filter_suffix       = ".txt"
  
  lambda_function {
    lambda_function_arn = aws_lambda_function.another_lambda_function.arn
    events              = ["s3:ObjectCreated:*"]    
    filter_prefix       = "another_example_bucket/"
    filter_suffix       = ".txt"
  }
}

最佳答案

您可以在多个资源上使用相同的计数变量。更好、更清晰的方法是将所有资源添加到模块中(如果您的代码中可以这样做)。 https://www.terraform.io/docs/language/meta-arguments/count.html

关于Terraform - 根据条件创建或不创建资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66871977/

相关文章:

amazon-cognito - 如何使用 Terraform 创建 AWS Cognito 用户

amazon-web-services - 使用 kms 数据资源的 terraform 代码的无效 arn 错误

amazon-web-services - 如何通过其规则修复 checkov 失败的项目?

api - terraform provider + Docker注册表v2 = 404

terraform - 无法使用 Terraform 在 ECS 任务定义容器上挂载 EFS 卷

amazon-web-services - Terraform 为创建的每个 aws_instance 创建 Route53 记录

terraform - 在创建资源之前,我们可以在 Terraform 中匹配多个条件吗?

amazon-web-services - 日志驱动程序 awslogs 需要选项 : awslogs-region, awslogs-group

terraform - 从地形 map 变量中提取值

terraform - 错误: Invalid resource instance data in state after upgrade