Terraform不会更新AWS金丝雀代码



我正在更改一个AWS金丝雀代码。

运行terraform apply后,我在新的zip文件中看到了更新,但在AWS控制台中,代码是.上的旧代码

我做错了什么?

我的地形代码:

resource "aws_synthetics_canary" "canary" {
depends_on           = [time_sleep.wait_5_minutes]
name                 = var.name
artifact_s3_location = "s3://${local.artifacts_bucket_and_path}"
execution_role_arn   = aws_iam_role.canary_role.arn
handler              = "apiCanary.handler"
start_canary         = true
zip_file             = data.archive_file.source_zip.output_path
runtime_version      = "syn-nodejs-puppeteer-3.3"
tags                 = {
Description = var.description
Entity      = var.entity
Service     = var.service
}
run_config {
timeout_in_seconds = 300
}
schedule {
expression = "rate(${var.rate_in_minutes} ${var.rate_in_minutes == 1 ? "minute" : "minutes"})"
}
}

我读过这篇文章,但对我没有帮助。

这可能是您的部署角色的权限问题。您的角色必须具有修改金丝雀后面的lambda的权限,才能应用zip文件更改创建的新层。

不幸的是,对lambda应用更改时发生的任何错误都不会通过terraform或AWS控制台中的任何位置进行通信,但如果失败,则您的金丝雀将继续指向旧版本的lambda,而不会更改代码。

您应该能够通过检查";脚本位置";金丝雀配置选项卡上的字段。此外,如果你点击脚本位置,你将能够看到你是否有更新的、未发布的lambda层版本,其中有你的代码更改

要验证故障是否是权限问题,您需要通过AWS CLI查询金丝雀。

运行aws synthetics get-canary --name <your canary name>并检查Status.StateReason.

如果在尝试应用更改时出现权限问题,您应该看到以下内容:

<user> is not authorized to perform: lambda:UpdateFunctionConfiguration on resource: <lamdba arn>

基于以上内容,您应该能够将任何丢失的权限添加到部署角色iam策略中,然后重试部署。

我同意@mjd2的观点,但同时通过手动哈希lambda源并将该哈希嵌入到源文件名中来解决这个问题:

locals {
source_code = <whatever your source is>
source_code_hash = sha256(local.source_code)
}
data "archive_file" "canary_lambda" {
type        = "zip"
output_path = "/tmp/canary_lambda_${local.source_code_hash}.zip"
source {
content  = local.source_code
filename = "nodejs/node_modules/heartbeat.js"
}
}

这样,无论何时编辑source_code,都将使用新的输出文件名,从而触发存档资源的替换。

遇到同样的问题。金丝雀本身似乎是一个测试版项目,它已经投入生产,而管理它的地形资源也有很多不足之处。没有像lambda那样的source_code_hash属性,所以您需要污染整个canary资源,以便使用任何更新的代码重新创建它。截至2022年11月,AWS Canary完全不成熟。它应该支持与slack的集成,或者至少支持开箱即用的AWS聊天机器人,但它没有。希望AWS团队能给它一些爱,因为与NewRelic、Dynatrace和大多数其他支持合成的监控服务相比,它现在很糟糕。

相关内容

  • 没有找到相关文章

最新更新