执行cdk deploy报错SSM参数上次修改日期不匹配如何解决?
错误根本原因
该报错是CloudFormation变更集校验失败导致的:你首次本地部署时,CDK会将解析到的SSM公共AMI参数/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2的最后修改时间、版本号等元数据缓存到本地上下文。更换EC2环境、切换IAM身份后,CDK重新拉取的该SSM参数元数据(AWS会定期更新公共AMI,对应SSM参数的元数据也会同步更新)和变更集里记录的旧元数据不一致,校验不通过就抛出该错误。
可按以下顺序尝试解决方案:
- 清理CDK上下文缓存后重新部署
先在项目根目录执行命令清除旧缓存:cdk context --clear
之后重新执行合成和部署命令即可:cdk synth && cdk deploy - 补全EC2 IAM角色的权限
确认EC2绑定的IAM角色已添加以下权限,避免因权限不足拉取到不完整的SSM参数元数据:{ "Effect": "Allow", "Action": [ "ssm:GetParameter", "ssm:GetParameters", "ec2:DescribeImages" ], "Resource": [ "arn:aws:ssm:*::parameter/aws/service/ami-amazon-linux-latest/*", "*" ] } - 修改CDK代码禁用AMI参数缓存
如果你使用CDK内置的AmazonLinuxImage接口获取AMI,可添加cachedInContext: false参数,强制每次部署都拉取最新的AMI信息,示例(TypeScript):const amzn2Ami = new ec2.AmazonLinuxImage({ generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2, cpuType: ec2.AmazonLinuxCpuType.X86_64, cachedInContext: false }); - 手动指定固定AMI ID/SSM参数版本
若上述方案都不生效,可先执行命令查询当前有效AMI对应的SSM参数版本:aws ssm get-parameter --name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
拿到返回结果中的Version字段后,在代码中直接指定带版本号的SSM参数路径,或直接硬编码返回的AMI ID值即可。
内容的提问来源于stack exchange,提问作者NiRR
相关产品推荐
相关产品推荐

