创建含Proactive Events API的Alexa Skill时AWS栈部署失败
解决Amazon Alexa Skill Proactive Events部署时CloudFormation栈回滚问题
核心问题定位
你遇到的PermanentRedirect错误是明确的区域不匹配问题:CloudFormation在us-east-1区域执行栈部署,但引用的Lambda代码存储在eu-west-1的S3桶中,跨区域直接访问S3桶会触发重定向错误,导致Lambda创建失败,最终栈回滚。
具体解决方向
统一AWS操作区域
- 检查
deploy.sh脚本中的区域配置,确保脚本指定的部署区域与S3桶所在的eu-west-1一致;如果需要使用us-east-1区域,就在该区域重新创建S3桶并上传Lambda代码包。 - 执行部署前,通过AWS CLI设置默认区域:
aws configure set region us-east-1(或eu-west-1),确保CLI操作区域与目标区域统一。
- 检查
修正CloudFormation模板的S3引用
如果需要保留eu-west-1的S3桶,在pingme.yaml的Lambda资源配置中添加S3Region参数,明确指定桶所在区域,示例:Resources: YourLambdaFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: your-existing-eu-west-1-bucket S3Key: lambda-deployment-package.zip S3Region: eu-west-1 # 其他Lambda配置项验证AWS用户权限
- 确保当前AWS用户拥有以下权限:
- CloudFormation栈创建/更新的相关权限(如
cloudformation:CreateStack、cloudformation:UpdateStack) - Lambda函数创建权限(
lambda:CreateFunction) - S3对象读取权限(
s3:GetObject),如果跨区域访问S3,需确保没有桶策略或IAM策略限制区域访问。
- CloudFormation栈创建/更新的相关权限(如
- 检查S3桶的桶策略,确认是否存在阻止us-east-1区域访问的条件语句,如有则调整策略允许对应区域访问。
- 确保当前AWS用户拥有以下权限:
重新部署流程
- 先清理已回滚的空栈:
aws cloudformation delete-stack --stack-name PingMe - 完成上述配置修正后,重新运行
deploy.sh脚本,或手动通过CloudFormation控制台部署修正后的pingme.yaml - 部署时可实时监控栈事件:
aws cloudformation describe-stack-events --stack-name PingMe --watch,快速定位新的问题点
- 先清理已回滚的空栈:
内容的提问来源于stack exchange,提问作者John Harris
相关产品推荐
相关产品推荐

