SAM deploy执行失败提示S3桶位于us-east-2区域如何解决
问题原因
你遇到的错误是跨区域S3资源访问不匹配导致的,核心逻辑如下:
- 执行
sam package时,代码包被上传到了位于us-east-2区域的S3存储桶 - 执行
sam deploy时没有指定部署区域,SAM默认调用本地AWS CLI配置的默认区域(从错误日志可判断默认区域为us-west-2),CloudFormation在us-west-2区域尝试拉取us-east-2区域存储桶内的代码时,触发S3永久重定向错误,最终导致Lambda函数创建失败。
解决方法
方案1:指定与S3桶同区域部署
执行deploy命令时明确添加区域参数,指定为S3桶所在的us-east-2即可:
sam deploy --template-file deploy.yaml --stack-name myStack4 --region us-east-2 --capabilities CAPABILITY_NAMED_IAM
注:添加
--capabilities CAPABILITY_NAMED_IAM是因为你的模板内指定了自定义IAM角色,部署时需要显式授予CloudFormation操作IAM资源的权限,否则会触发权限不足错误。
方案2:切换S3存储桶到目标部署区域
如果你确实需要将资源部署到us-west-2区域,先在us-west-2区域新建一个S3存储桶,重新执行package命令指定新桶:
sam package --template-file template.yaml --output-template-file deploy.yaml --s3-bucket <你在us-west-2创建的新桶名称> --region us-west-2
之后再执行deploy命令,同样指定us-west-2区域即可。
方案3:使用引导式部署自动保存配置
首次部署时添加--guided参数,按照交互提示输入部署区域、S3桶等信息,SAM会自动生成samconfig.toml配置文件,后续部署无需重复输入参数:
sam deploy --guided
交互提示的Region项填写us-east-2,和S3桶的区域保持一致即可。
内容的提问来源于stack exchange,提问作者MIike Eps
相关产品推荐
相关产品推荐

