[英]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.