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

在AWS Amplify部署自定义CDK Lambda时遇S3桶不存在错误

解决Amplify+CDK部署Lambda时S3资产桶不存在的问题

问题核心

你遇到的是CDK自动生成的资产桶未被正确创建导致的Lambda部署失败。使用lambda.Code.fromAsset加载本地代码时,CDK会默认创建名为cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}的桶来存放打包后的代码,但Amplify的自定义CDK资源流程可能未触发这个桶的创建步骤,导致CloudFormation部署时找不到目标桶。

解决方案

1. 手动触发CDK资产桶创建

进入你的自定义CDK资源目录(比如amplify/backend/custom/your-custom-resource),执行以下命令:

cdk bootstrap aws://<你的AWS账号ID>/<部署区域>

这个命令会自动创建CDK所需的资产桶,以及配套的IAM角色和权限配置,确保后续打包的Lambda代码能正确上传到桶中。

2. 重新部署Amplify资源

回到项目根目录,重新执行部署命令:

amplify push

此时CDK会将你的Lambda代码打包并上传到刚创建的资产桶,CloudFormation就能正常找到S3对象,不会再报NoSuchBucket错误。

额外排查要点

  • 升级Amplify CLI:确保使用最新稳定版,旧版本可能存在CDK集成的兼容性问题,升级命令:npm install -g @aws-amplify/cli
  • 验证本地代码目录:确认../myfunction/目录存在,且包含正确的index.js(或TypeScript编译后的产物),避免打包失败导致资产未上传
  • 清理手动创建的桶:如果之前手动创建过同名的S3桶,先删除它——CDK需要自行管理这个桶的配置和权限,手动创建的桶可能不符合要求

代码与报错参考

你的Lambda定义代码:

import * as cdk from 'aws-cdk-lib';
import * as AmplifyHelpers from '@aws-amplify/cli-extensibility-helper';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import path from "path"

export class cdkStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps, amplifyResourceProps?: AmplifyHelpers.AmplifyResourceProps) {
    super(scope, id, props);
    new cdk.CfnParameter(this, 'env', {
      type: 'String',
      description: 'Current Amplify CLI env name',
    });    
  
    const amplifyProjectInfo = AmplifyHelpers.getProjectInfo();

    const funcResourceNamePrefix = `func-${amplifyProjectInfo.projectName}`;
    const func = new lambda.Function(this, 'MyFunction', {
      runtime: lambda.Runtime.NODEJS_16_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset(path.join(__dirname, '../myfunction/')),
      functionName: `${funcResourceNamePrefix}-${cdk.Fn.ref('env')}`,
    });
  }
}

CloudFormation中Lambda指向的资产桶定义:

"MyFunction3BAA72D1": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
          },
          "S3Key": "c4b0207499ed4bf5fa0062eeeab46178e1968835fa4a82c11da08a81bdcad438.zip"
        },
        "Role": {
          "Fn::GetAtt": [
            "MyFunctionServiceRole3C357FF2",
            "Arn"
          ]
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              "func-testapp-",
              {
                "Ref": "env"
              }
            ]
          ]
        },
        "Handler": "index.handler",
        "Runtime": "nodejs16.x"
      }
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:17:35