AWS cdk 创建新的 lambda@edge 版本

AWS cdk create new lambda@edge version

我正在使用 cdk 将 lambda on edge 添加到 cloudfront web 分发(详情请参见下面的代码)。

const edgeFunction = new cloudfront.experimental.EdgeFunction(this, 'LambdaOnEdgeAuthFunction', {
   runtime: lambda.Runtime.NODEJS_12_X,
   handler: 'index.handler',
   code: lambda.Code.fromAsset('lambda/auth'),
   description: `Generated on: ${new Date().toISOString()}`
});

// A numbered version to give to cloudfront
const egdeFunctionVersion = new lambda.Version(this, "edgeVersion", {
   lambda: edgeFunction,
   description: `Generated on: ${new Date().toISOString()}`, //adding this did not create new version
});

将函数添加到我的云端 webdistribution

// CloudFront distribution that provides HTTPS and used the key pair above
const distribution = new cloudfront.CloudFrontWebDistribution(this, 'SiteDistribution', {
originConfigs: [{
     s3OriginSource: {
       /* my s3 bucket*/
     },
     behaviors: [{
        isDefaultBehavior: true,
        lambdaFunctionAssociations: [{
          eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST,
          lambdaFunction: egdeFunctionVersion
          }]
 /*... end of declaration ...*/

但是,通过 cdk deploy --all 部署更改总是抛出相同的异常:

A version for this Lambda function exists ( 1 ). Modify the function to create a new version.

我从我的帐户中删除了所有现有的 lambda 函数,并从我现有的贡献中删除了所有 lambda 函数。但这并没有解决问题。我还应用了提到的修复程序 here,结果相同。

你能帮我创建一个新版本或找到并删除我必须删除的 lambda 版本吗(如前所述,到目前为止 aws 帐户中不存在任何功能)?

AWS Lambda@Edge 函数仅部署在 us-east-1 区域。 Reference

所以你可以做两件事。尝试 cdk destroy 并再次部署以查看它是否解决了问题。

或者创建一个新版本的 lambda 函数并重试。 Lambda 函数版本的参考是 here

验证您的 Lambda 函数是否在 us-east-1 区域以验证问题的根本原因。

为 lambda@edge 创建新版本的方法是获取函数的当前版本。

const edgeFunc = new lambda.Function(this, 'edgeFuncName', {
      runtime: lambda.Runtime.NODEJS_14_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset(edgeFuncPath),
      currentVersionOptions: {
        removalPolicy: RemovalPolicy.DESTROY
      }
      
    });
const edgeFuncVersion = edgeFunc.currentVersion

然后将 edgeFuncVersion 分配给 CloudFront 行为

这是描述here