我遇到了同样的错误,我设法通过执行以下操作来解决它:
1- 在构建规范 ( buildspec.yml ) 上添加一个 sam package 命令(这会生成一个package.yml,cloudformation 将使用它来部署 lambda)。
build:
commands:
- sam package
--template-file ../template.yaml
--output-template-file ../package.yml
--s3-bucket onnera-ci-cd-bucketcode here
2-将package.yml添加到输出工件
artifacts:
files:
- DeviceProvisioning/package.yml
3- 在将部署的template.yaml上直接引用 CodeUri(在内部,这将通过 codebuild 的输出工件解析到存储桶)。
Resources:
DeviceProvisioningFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: DeviceProvisioningFunction/target/DeviceProvisioningFunction-1.0.jar
4-在管道上使构建阶段的输出在部署阶段可用:
const buildOutput = [new codepipeline.Artifact()];
const buildAction = new codepipeline_actions.CodeBuildAction({
actionName: 'CodeBuild',
project: deviceProvisioning,
input: sourceOutput,
outputs: buildOutput,
});
5- 使用构建输出在部署操作中指定模板路径:
const deployAction = new codepipeline_actions.CloudFormationCreateUpdateStackAction({
extraInputs: buildAction.actionProperties.outputs,
actionName: "UpdateLambda",
stackName: "DeviceProvisioningStack",
adminPermissions: true,
templatePath: buildOutput[0].atPath("package.yml"),
cfnCapabilities: [CfnCapabilities.AUTO_EXPAND, CfnCapabilities.NAMED_IAM]
});
确保构建阶段的输出工件在部署阶段可用。
