在这个场景中,我需要确保是否存在aws lambda,如果存在,就停止使用terraform创建它,因此我使用count进行条件呈现,如下所示:
resource "aws_lambda_function" "lambda_aurora_hibernation" {
count = var.is_lambda_exist == "exist" ? 0 : 1
filename = "lambda_function.zip"
function_name = "lambda-aurora-hibernation"
role = aws_iam_role.lambda_role.arn
handler = "lambda_function.lambda_handler"
source_code_hash = filebase64sha256("lambda_function.zip")
runtime = "python3.6"
}
resource "aws_lambda_permission" "lambda_aurora_hibernation_permission" {
count = length(aws_lambda_function.lambda_aurora_hibernation)
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.lambda_aurora_hibernation[count.index].function_name
principal = "events.amazonaws.com"
source_arn = aws_cloudwatch_event_rule.lambda_aurora_hibernation_event_rule.arn
depends_on=[aws_lambda_function.lambda_aurora_hibernation]
}第一个terraform apply中变量terraform apply的值是not_exists,因此count的值变为1,这是正确的。
在下一个terraform apply中,我将is_lambda_exist的值更改为exist,然后count的值变为0 ,这将导致资源的删除。
我这么做的原因是有人可以手动创建资源,所以如果该lambda已经以其他方式存在,则需要停止创建它。
我怎么才能阻止这一切?有人能帮帮我吗?
谢谢。
发布于 2021-09-14 16:04:16
根本不需要计算资源。默认计数为1。如其文件所述:
默认情况下,资源块配置一个实际的基础设施对象。
(https://www.terraform.io/docs/language/meta-arguments/count.html)
我认为你误解了Terraform的一个核心原则,那就是它是声明性的。
这意味着,如果它只创建了一次资源,那么后续运行的apply将不会创建相同形状的另一个资源,除非资源定义发生了更改,使其无法就地更新,然后它将破坏现有资源并在其位置创建一个新资源。
因此,除非您将count设置为大于一个,否则您将永远只有一个资源。
resource "aws_lambda_function" "lambda_aurora_hibernation" {
filename = "lambda_function.zip"
function_name = "lambda-aurora-hibernation"
role = aws_iam_role.lambda_role.arn
handler = "lambda_function.lambda_handler"
source_code_hash = filebase64sha256("lambda_function.zip")
runtime = "python3.6"
}
resource "aws_lambda_permission" "lambda_aurora_hibernation_permission" {
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.lambda_aurora_hibernation.function_name
principal = "events.amazonaws.com"
source_arn = aws_cloudwatch_event_rule.lambda_aurora_hibernation_event_rule.arn
depends_on = [aws_lambda_function.lambda_aurora_hibernation]
}https://stackoverflow.com/questions/69180930
复制相似问题