簡體   English   中英

使用 AWS CDK 部署 Lambda function(不作為應用程序的一部分)

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

我正在嘗試使用 AWS CDK 部署一些 lambda。 下面粘貼的代碼創建了一個無服務器應用程序,還與一個新創建的角色相關聯。 但對於我的用例,只需要獨立功能。 所以.. CDK API 中是否有任何選項可以僅創建 function(不是 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 的 Constructs 根集合。 但這不應該打擾你。

文檔:AWS CDK 應用程序由稱為 Constructs 的構建塊組成,它們組合在一起形成堆棧和應用程序。

更廣泛地說,如果問題是“我只想要一個簡單的 lambda,沒有額外的東西(或成本)?我可以使用 CDK 嗎?” ,那么是的,當然。 CDK“應用程序”本身不是部署資源,沒有價格。

我們可以用一個最小的、僅 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用於版本報告

// 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 function(沒有 Lambda 應用程序)無法使用控制台或 AWS CLI 創建。因此,AWS

Pasting extracted content, "From your latest correspondence, a standalone lambda function can be created using the CDK & CloudFormation however, a Lambda application is also created that contains any relevant resources that work with your Lambda function. As previously discussed, this does not change您與使用 CDK 和 CloudFormation 部署的 Lambda function 交互的方式,因為您將在 AWS Lambda35 中看到獨立的 Lambda 函數。

如果您想創建 function 而不創建 Lambda 應用程序,您可以查看使用 AWS 控制台或 AWS CLI [1] 創建 function。 "

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM