如何将Cloud Custodian策略部署为AWS Lambda函数?部署异常求助
解决Cloud Custodian部署Lambda函数不显示的问题
可能的遗漏点排查
- AWS账户/区域不匹配:本地配置的AWS凭证可能对应其他账户,或者部署时指定的区域和Lambda控制台查看的区域不一致。执行
aws sts get-caller-identity确认当前账户,部署命令务必加上--region参数指定目标区域。 - 策略文件Lambda配置错误:如果策略的
mode块缺少关键配置(比如type: lambda拼写错误、runtime版本不被AWS支持、指定的IAM角色不存在),Custodian会静默失败或跳过Lambda创建。 - 权限不足:你的AWS凭证没有足够权限创建Lambda、IAM角色及相关资源,部署时会有日志提示,需要给当前IAM用户添加
iam:CreateRole、iam:AttachPolicy、lambda:CreateFunction、lambda:AddPermission等权限。 - Cloud Custodian版本兼容:旧版本Custodian的Lambda部署命令是
c7n lambda deploy,新版本统一用c7n deploy,执行c7n --version确认版本后使用对应命令。
正确的Lambda部署流程
- 编写合规的策略文件(示例
ec2-cleanup.yml):
policies: - name: stop-unused-ec2 resource: ec2 mode: type: lambda # 可指定现有IAM角色,或留空让Custodian自动创建(需权限) role: arn:aws:iam::123456789012:role/custodian-lambda-exec runtime: python3.10 timeout: 300 memory: 256 events: - type: schedule rate: rate(1 day) filters: - type: unused days: 7 actions: - stop
替换123456789012为你的AWS账户ID,runtime选择AWS Lambda支持的版本(如python3.9/3.10)。
- 执行部署命令:
# 新版本Custodian c7n deploy -c ec2-cleanup.yml -s .deploy --region us-east-1 # 旧版本(v0.9.17及之前) c7n lambda deploy -c ec2-cleanup.yml --region us-east-1
-s .deploy指定部署状态存储目录,方便后续更新或回滚。
- 验证部署结果:
- 查看部署命令的输出日志,确认没有报错信息。
- 登录AWS Lambda控制台,切换到指定区域,查找名称格式为
c7n-<策略名>的函数。
内容的提问来源于stack exchange,提问作者Ramesh Thiyagarajan
相关产品推荐
相关产品推荐

