有人可以指导我如何将现有的 lambda 层添加到第 2 代放大函数中吗?我在他们的文档中找不到任何参考来执行此操作,但我找到了一些有帮助的外部参考:
澄清一下,我有一个来自不同项目的现有 lambda 层,我想重用它,并且它已经部署在控制台上。现在,我只想将其附加到
backend.ts
中的 amplify gen 2 函数。但是,上面的示例使用的是层或类的本地路径,我认为这不适用于我的情况。我无法使用本地路径,因为层代码位于不同的存储库中,并且我不知道如何将类与 AWS amplify 的后端代码结合使用。
这是我添加 lambda 层的尝试:
import { defineBackend } from '@aws-amplify/backend'
import { auth } from './auth/resource'
import { data } from './data/resource'
import { myFunc} from './functions/MyFunc/resource'
import * as lambda from 'aws-cdk-lib/aws-lambda'
import { Stack } from 'aws-cdk-lib'
const backend = defineBackend({
auth,
data,
myFunc,
})
const myFuncLambda = backend.myFunc.resources.lambda as lambda.Function
const layerVersion = lambda.LayerVersion.fromLayerVersionArn(
Stack.of(myFuncLambda),
'myFuncLayer',
'arn:aws:lambda:{AWS::REGION}:{AWS::ACCOUNTID}:layer:{AWS::LAYERNAME}:{AWS::LAYERVERSION}'
)
myFuncLambda.addLayers(layerVersion)
编辑:为了进一步说明,我提供的代码在部署放大时不起作用。当我尝试部署时收到此错误消息:
NodeJSFunctionConstructInitializationError: Failed to instantiate nodejs function construct
这就是在我的 Amplify Gen2 应用程序中添加图层的方式。
import { defineBackend } from '@aws-amplify/backend';
import { auth } from './auth/resource';
import { data } from './data/resource';
import { storage } from './storage/resource';
import { generateThumbnail } from './functions/generate-thmbnail/resource';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import 'dotenv/config'
var sharpLambdaLayerArn = process.env.SHARP_LAMBDA_LAYER_ARN;
var ffmpegLambdaLayerArn = process.env.FFMPEG_LAMBDA_LAYER_ARN;
if (!sharpLambdaLayerArn || !ffmpegLambdaLayerArn) {
throw new Error('Missing required environment variables');
}
const backend = defineBackend({
auth,
data,
storage,
generateThumbnail
});
// Add the Sharp Layer to the generateThumbnail function
const generateThumbnailLambda = backend.generateThumbnail.resources.lambda as lambda.Function
const sharpLambdaLayer = lambda.LayerVersion.fromLayerVersionArn(generateThumbnailLambda, "SharpLayer", sharpLambdaLayerArn)
generateThumbnailLambda.addLayers(sharpLambdaLayer)