Amazon web services 使用CodePipeline和CDK生成的CloudFormation模板部署Lambda函数

Amazon web services 使用CodePipeline和CDK生成的CloudFormation模板部署Lambda函数,amazon-web-services,aws-lambda,amazon-cloudformation,aws-codepipeline,aws-cdk,Amazon Web Services,Aws Lambda,Amazon Cloudformation,Aws Codepipeline,Aws Cdk,我有一个Lambda函数,我正试图使用CodePipeline部署它 Lambda函数源代码与Lambda CDK应用程序位于同一项目中。由于它们都在同一个存储库中,CDK应用程序可以直接引用Lambda源代码 当CDK应用程序可以直接引用lambda代码时,文档建议使用lambda.code.fromsete(path),因此我开始使用lambda函数的以下定义 const fn = new lambda.Function(this, "Fn", { code: lambda.Code.f

我有一个Lambda函数,我正试图使用CodePipeline部署它

Lambda函数源代码与Lambda CDK应用程序位于同一项目中。由于它们都在同一个存储库中,CDK应用程序可以直接引用Lambda源代码

当CDK应用程序可以直接引用lambda代码时,文档建议使用
lambda.code.fromsete(path)
,因此我开始使用lambda函数的以下定义

const fn = new lambda.Function(this, "Fn", {
  code: lambda.Code.fromAsset(path/to/lambda/source),
  handler: "index.handler",
  runtime: lambda.Runtime.NODEJS_10_X
});
在CodePipeline中,我使用CodeBuild运行
cdk synth
并合成CloudFormation模板

以这种方式定义我的Lambda的问题在于,CloudFormation模板具有Lambda源代码bucket和key的参数,这些参数似乎是随机命名的,例如,
AssetParameters3ffd…affdS3Bucket1CFF873D

运行
cdk deploy
时,CLI知道参数是什么,并用值填充它们

然而,在我的例子中,我没有使用
cdk部署
。我想在代码管道中使用CloudFormation

这意味着我需要用代码构建步骤输出的Lambda源工件的值填充参数。获取值很容易,但我无法知道参数的名称

接下来,我尝试使用以下方法自己定义参数名

const fn = new lambda.Function(this, "Fn", {
  code: lambda.Code.fromCfnParameters({
    bucketNameParam: new core_1.CfnParameter(this, "LambdaSourceBucket"),
    objectKeyParam: new core_1.CfnParameter(this, "LambdaSourceKey"),
  }),
  handler: "index.handler",
  runtime: lambda.Runtime.NODEJS_10_X
});
不走运
cdk synth
仍然修改模板中的参数名称,例如
AppLambdaSourceBucket8B89D730
。这比以前好多了,但我仍然不能确定参数的名称,以便在代码管道中分配它们

我不能使用
lambda.code.fromBucket(bucket,key)
,因为bucket和key是由codepippeline/CodeBuild决定的

我发现这个例子和我做的几乎一样,只是它们的代码管道和Lambda函数在同一个CDK应用程序中定义。这避免了我遇到的问题,因为Lambda定义和codepippeline定义都可以引用相同的
CfnParametersCode
实例

不幸的是,我不能像在那个例子中那样将代码管道定义和Lambda放在一起。我觉得如果没有它,这一切还是有可能的


我遗漏了什么?

我可以用
新的CfnParametersCode
实现这一点(它应该相当于您调用的工厂方法)。您是否可能在另一个构造内部而不是在堆栈级别创建此项?

您是否解决了此问题?我也有同样的问题。请参阅我对应的github问题。