我需要在指定的环境中创建我的资源。例如,如果我有一个尚未准备好用于生产的 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/