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
我正在使用 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