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

AWS Serverless Framework部署栈时Custom::S3卡住并回滚问题求助

问题分析与解决方案

问题核心

使用Serverless Framework部署栈时,添加外部CDK创建的S3桶事件触发器后,两个Custom::S3资源卡在CREATE_IN_PROGRESS状态,最终超时回滚,CloudFormation提示CloudFormation did not receive a response from your Custom Resource。移除S3事件触发器配置后部署正常。

解决方案

1. 给Serverless部署角色添加S3桶通知权限

Serverless Framework会通过内部自定义资源Lambda配置S3事件触发器,该Lambda需要权限操作外部S3桶的通知设置。在serverless.yml的provider部分添加以下IAM权限声明:

provider:
  name: aws
  # 保留原有其他配置
  iamRoleStatements:
    - Effect: Allow
      Action:
        - s3:PutBucketNotification
        - s3:GetBucketNotification
      Resource: arn:aws:s3:::myapp-${sls:stage}-data

2. 检查外部S3桶的桶策略

确认CDK创建的S3桶策略允许Serverless自定义资源Lambda的角色执行通知配置操作。若桶有严格权限控制,添加以下桶策略条目(替换为实际的角色ARN):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:role/serverless-YOUR_SERVICE-YOUR_STAGE-custom-resource"
      },
      "Action": [
        "s3:PutBucketNotification",
        "s3:GetBucketNotification"
      ],
      "Resource": "arn:aws:s3:::myapp-${sls:stage}-data"
    }
  ]
}

3. 查看自定义资源Lambda的CloudWatch日志

Serverless创建的自定义资源Lambda(命名格式通常为serverless-${service}-${stage}-custom-resource)的日志会记录具体执行错误,操作步骤:

  • 打开CloudWatch控制台,进入日志组/aws/lambda/serverless-YOUR_SERVICE-YOUR_STAGE-custom-resource
  • 查看最新日志事件,定位权限拒绝、桶不存在等具体问题

4. 调整S3事件触发器配置

尝试移除forceDeploy: true参数,该配置会强制更新触发器,可能与外部桶的现有配置冲突:

events:
  - s3:
      bucket: myapp-${sls:stage}-data
      event: s3:ObjectCreated:*
      existing: true
      rules:
        - prefix: xxx/
        - suffix: .csv

5. 验证S3桶的存在与可访问性

确认myapp-${sls:stage}-data桶存在于eu-west-3区域,且部署角色可正常访问:

aws s3 ls s3://myapp-tst-data --region eu-west-3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:24:52