使用 AWS CDK 部署 Lambda 函数(不作为应用程序的一部分)

Deploying Lambda function (not as part of an Application) using AWS CDK

我正在尝试使用 AWS CDK 部署几个 lambda。下面粘贴的代码创建了一个无服务器应用程序,也创建了一个关联的新创建角色。但对于我的用例,只需要独立的功能。所以.. CDK API 中是否有任何选项可以只创建函数(而不是 lambda 应用程序)。能否分享一下您对此的建议或经验?

    new lambda.Function(this, 'History', {
      functionName: 'History',
      code: lambda.Code.fromAsset(path.join(__dirname, '../lambda/getHistory')),
      handler: 'index.handler',
      runtime: lambda.Runtime.NODEJS_14_X,
      environment: {
        ---;
      },
      timeout: cdk.Duration.seconds(120),
      description: '---',
      // role:
    });

这可能会造成混淆,因为“应用程序”是一个重载的术语。狭隘的答案是否定的,没有 App 的 CDK,这是 CDK 的构造的根集合。但这不应该打扰你。

Docs: AWS CDK apps are composed of building blocks known as Constructs, which are composed together to form stacks and apps.

更广泛地说,如果问题是 “我只想要一个没有额外东西(或成本!)的简单 lambda,我可以使用 CDK 吗?”,那么可以,当然。 CDK“App”本身不是部署资源,没有价格。

我们可以使用最小的、仅 lambda 的堆栈来演示这一点,并将生成的 CloudFormation 模板 cdk deploy 发送到 AWS。

// a minimial lambda stack
// Only a lambda will be created.  Not even a role, because we are reusing an existing one (not a best practice, just for illustration)
export class MinimalStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    new lambda.Function(this, 'MyPlaygroundFunction', {
      code: new lambda.InlineCode("exports.handler = () => console.log('hello lambda')"),
      runtime: lambda.Runtime.NODEJS_14_X,
      handler: 'index.handler',
      role: iam.Role.fromRoleArn(this, 'MyExistingRole', 'arn:aws:iam::xxxxxxxx8348350:role/xxxxxxxxxxxxx-GI5QDFDJWT0A'),
    });
  }
}

该模板只有 2 个资源,Lambda 和一个自动创建的 AWS::CDK::Metadata 用于 version reporting:

// CloudFormation template Resource section - the template will be in the cdk.out folder
  "Resources": {
    "MyPlaygroundFunctionBAD1926E": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": { "ZipFile": "exports.handler = () => console.log('hello lambda')"},
        "Role": "arn:aws:iam::xxxxxxxx8348350:role/xxxxxxxxxxxxx-GI5QDFDJWT0A",
        "Handler": "index.handler",
        "Runtime": "nodejs14.x"
      },
      "Metadata": {"aws:cdk:path": "TsCdkPlaygroundMinimalStack/MyPlaygroundFunction/Resource"}
    },
    "CDKMetadata": {
      "Type": "AWS::CDK::Metadata",
      "Properties": { "Analytics": "v2:deflate64:H4sAAAAA/zWK...."},
      "Metadata": { "aws:cdk:path": "TsCdkPlaygroundMinimalStack/CDKMetadata/Default"}
    }
  },

我错过了更新。根据 aws 支持的回复“无法使用 CDK 和 CloudFormation 创建独立的 lambda 函数(没有 Lambda 应用程序)。因此,必须使用 AWS 控制台或 AWS CLI”。

粘贴提取的内容,“根据您最近的通信,可以使用 CDK 和 CloudFormation 创建一个独立的 lambda 函数,但是,还会创建一个 Lambda 应用程序,其中包含与您的 Lambda 函数一起使用的任何相关资源。如前所述,这不会改变您与使用 CDK 和 CloudFormation 部署的 Lambda 函数交互的方式,因为您将在 AWS Lambda 控制台中看到独立的 Lambda 函数。

如果您想在不创建 Lambda 应用程序的情况下创建函数,您可以查看使用 AWS 控制台或 AWS CLI [1] 创建函数。 “