You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过S3部署Python版AWS Synthetics Canary遇加载失败求助

问题分析与解决方案

核心问题定位

  1. Terraform参数配置错误:aws_synthetics_canary的s3_key参数误用了aws_s3_object的id字段(格式为bucket/key),但该参数仅需传入S3对象的键(Key),不需要包含bucket名称。
  2. 执行角色权限缺失:Canary的执行角色未被授予读取S3代码包的权限,导致无法拉取脚本文件到运行环境。
  3. 脚本语法瑕疵:代码中__name_少了一个下划线,会引发运行时语法错误(虽不是当前模块找不到的直接原因,但需修正)。

具体修复步骤

1. 修正Terraform的S3路径配置

将aws_synthetics_canary中的s3_key字段从aws_s3_object.function_archive_upload.id改为aws_s3_object.function_archive_upload.key:

resource "aws_synthetics_canary" "canary_api_calls" {
  # 保留原有其他配置
  s3_bucket = module.assets_s3.canary_reports_bucket_id
  s3_key    = aws_s3_object.function_archive_upload.key  # 仅传入S3对象的键
  # 保留原有其他配置
}

2. 为执行角色添加S3读取权限

给Canary的执行角色添加读取代码包所在S3路径的权限,示例IAM策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-canary-bucket/functions/${aws:accountId}/${aws:region}/your-canary-name/function.zip"
    }
  ]
}

如果用Terraform管理IAM角色,可通过aws_iam_role_policy_attachment或内嵌策略完成权限配置。

3. 确认代码包结构

你的压缩包结构是合规的(根目录直接包含canary.py),无需调整。注意压缩时不要将脚本嵌套在子文件夹内。

4. 修正Python脚本语法错误

将__name_改为__name__,避免运行时异常:

_LOGGER = logging.getLogger(__name__)  # 修正下划线数量

验证操作

  1. 重新执行terraform apply,确保配置更新生效。
  2. 查看Canary UI的“Canary script”区域,确认加载错误消失。
  3. 手动触发Canary运行,检查日志是否不再出现ModuleNotFoundError。

内容的提问来源于stack exchange,提问作者Dustin Oprea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:53:11