AWS CDK 应用程序如何 "reference" 已创建 aws lambda 函数(无需在堆栈中创建新函数)?

AWS CDK application how to "reference" already created aws lambda function (without creating a new one in a stack)?

我在我的 aws 环境中创建了一个名为 add 的 lambda 函数,我正在尝试构建一个 cdk 应用程序,它将生成一个新的 API 网关,然后调用 add .

我正在学习 https://cdkworkshop.com/20-typescript/30-hello-cdk/300-apigw.html 上的教程,我注意到我在网上遇到的所有示例似乎都以类似于以下的形式编写代码:

   const hello = new lambda.Function(this, 'HelloHandler', {
      runtime: lambda.Runtime.NODEJS_10_X,    // execution environment
      code: lambda.Code.fromAsset('lambda'),  // code loaded from "lambda" directory
      handler: 'hello.handler'                // file is "hello", function is "handler"
    });
    const api = new apiGateWay.LambdaRestApi(this, 'api', {
      handler: hello
    })

上面的例子直接创建了一个新的 lambda 函数名称,其中包含 HelloHanlder。我想引用我之前创建的函数 add,而不是向堆栈添加任何新的 lambda 函数,类似于:

    const api = new apiGateWay.LambdaRestApi(this, 'api', {
      handler: "add"
    })

这可以修复吗?

选项 1:使用函数 Arn 中的现有 Lambda

const hello = lambda.Function.fromFunctionArn(
  this,
  "hello-lambda",
  "arn:aws:lambda:us-east-1:111222233333:function:hello-lambda"
);
new apigw.LambdaRestApi(this, "Endpoint", {
  handler: hello,
});

选项 2:您可以将现有的 lambda 导入新的 CloudFormation 堆栈并导出 Arn 并导入 CDK