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

跨账号部署CloudFormation栈失败:Lambda的CodeUri格式问题修复咨询

跨账号CloudFormation部署Lambda报错的解决方法

问题根源

报错核心原因是:CodeUri: ./lambda并非有效的S3 URI格式。跨账号部署场景下,目标账号的CloudFormation无法直接访问部署环境的本地文件,必须将Lambda代码打包上传至S3,再通过S3路径引用代码包。

修改步骤

1. 调整CloudFormation模板(cloudformation.yml)

将本地路径的CodeUri改为S3路径,并新增参数传入存储代码包的S3桶名(避免硬编码,提升灵活性):

AWSTemplateFormatVersion: "2010-09-09"
Transform: "AWS::Serverless-2016-10-31"
Description: A starter AWS Lambda function.

Parameters:
  LambdaCodeBucket:
    Type: String
    Description: S3桶名称,需确保目标账号可读取该桶内文件

Resources:
  helloworldpython3:
    Type: "AWS::Serverless::Function"
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: !Sub s3://${LambdaCodeBucket}/lambda-code-package.zip
      Description: 'Lambda function for CD Demo'
      MemorySize: 128
      Timeout: 30

2. 修改Buildspec.yml(buildspec.yml)

新增Lambda代码打包、上传至S3的步骤,部署CloudFormation时传入S3桶参数:

version: 0.2

phases:
  install:
    commands:
      - echo $CROSS_ACCOUNT_ROLE
      - echo $TARGET_ACCOUNT_ID
      - cd $CODEBUILD_SRC_DIR
      - chmod +x cross-account-setup.sh
  build:
    commands:
      - echo "打包Lambda代码"
      - cd $CODEBUILD_SRC_DIR/lambda
      - zip -r ../lambda-code-package.zip . # 将lambda目录下所有文件打包到根目录
      - echo "上传代码包至S3"
      - export LAMBDA_CODE_BUCKET="你的跨账号S3桶名" # 替换为实际桶名
      - aws s3 cp ../lambda-code-package.zip s3://${LAMBDA_CODE_BUCKET}/
      - echo "开始部署CloudFormation栈"
      - cd $CODEBUILD_SRC_DIR
      - . ./cross-account-setup.sh
      - >
        aws cloudformation deploy --stack-name amr-manual-deployment-cicd 
        --template-file cloudformation.yml 
        --parameter-overrides LambdaCodeBucket=${LAMBDA_CODE_BUCKET}
        --no-fail-on-empty-changeset 
      - echo "部署完成"

3. 补充权限配置

  • 部署账号需拥有目标S3桶的写入权限,可上传代码包。
  • 目标账号需拥有该S3桶的读取权限,可添加桶策略实现:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::目标账号ID:root"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::你的跨账号S3桶名/*"
    }
  ]
}

关键注意事项

  • 打包Lambda代码时,需确保zip包根目录直接包含lambda_function.py等文件,而非嵌套在lambda子目录中(与Handler路径匹配)。
  • 跨账号场景下禁止使用本地路径作为CodeUri,目标账号CloudFormation无权限访问部署机器的本地文件系统。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:05:38