本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Lambda 搭配 使用 AWS CloudFormation
在 AWS CloudFormation 範本中,您可以指定 Lambda 函數做為自訂資源的目標。使用自訂資源來處理參數、擷取組態值,或在堆疊生命週期事件 AWS 服務 期間呼叫其他 。
下列範例叫用在範本中其他地方定義的函數。
範例 - 自訂資源定義
Resources: primerinvoke: Type: AWS::CloudFormation::CustomResource Version: "1.0" Properties:
ServiceToken: !GetAtt primer.Arn FunctionName: !Ref randomerror
服務權杖是在您建立、更新或刪除堆疊時 AWS CloudFormation 叫用之函數的 Amazon Resource Name (ARN)。您也可以包含其他屬性,例如 FunctionName
,這些屬性會照原樣 AWS CloudFormation 傳遞給您的 函數。
AWS CloudFormation 使用包含回呼 的事件以非同步方式叫用 Lambda 函數URL。
範例 – AWS CloudFormation 訊息事件
{ "RequestType": "Create", "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66", "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3-us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A123456789012%3Astack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456%7Cprimerinvoke%7C5d478078-13e9-baf0-464a-7ef285ecc786?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1555451971&Signature=28UijZePE5I4dvukKQqM%2F9Rf1o4%3D", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456", "RequestId": "5d478078-13e9-baf0-464a-7ef285ecc786", "LogicalResourceId": "primerinvoke", "ResourceType": "AWS::CloudFormation::CustomResource", "ResourceProperties": { "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66", "FunctionName": "lambda-error-processor-randomerror-ZWUC391MQAJK" } }
函數負責將回應傳回至表示成功或失敗URL的回呼。如需完整的回應語法,請參閱自訂資源回應物件。
範例 – AWS CloudFormation 自訂資源回應
{ "Status": "SUCCESS", "PhysicalResourceId": "2019/04/18/[$LATEST]b3d1bfc65f19ec610654e4d9b9de47a0", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456", "RequestId": "5d478078-13e9-baf0-464a-7ef285ecc786", "LogicalResourceId": "primerinvoke" }
AWS CloudFormation 提供名為 的程式庫cfn-response
,可處理傳送回應。如果您在範本中定義函數,您可以要求程式庫名稱。 AWS CloudFormation 然後, 會將程式庫新增至其為函數建立的部署套件。
如果自訂資源使用的函數已連接彈性網路介面,請將下列資源新增至 VPC政策,其中 region
是函數所在的區域,不含破折號。例如,us-east-1
為 useast1
。這將允許自訂資源回應回呼URL,將訊號傳回堆疊 AWS CloudFormation 。
arn:aws:s3:::cloudformation-custom-resource-response-
region
", "arn:aws:s3:::cloudformation-custom-resource-response-region
/*",
下列的範例函式會叫用第二個函式。如果呼叫成功,函數會傳送成功回應給 AWS CloudFormation,堆疊更新會繼續。範本使用 提供的 AWS::Serverless::Function 資源類型 AWS Serverless Application Model。
範例 – 自訂資源函數
Transform: 'AWS::Serverless-2016-10-31' Resources: primer: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs16.x InlineCode: | var aws = require('aws-sdk');
var response = require('cfn-response');
exports.handler = function(event, context) { // For Delete requests, immediately send a SUCCESS response. if (event.RequestType == "Delete") { response.send(event, context, "SUCCESS"); return; } var responseStatus = "FAILED"; var responseData = {}; var functionName = event.ResourceProperties.FunctionName var lambda = new aws.Lambda(); lambda.invoke({ FunctionName: functionName }, function(err, invokeResult) { if (err) { responseData = {Error: "Invoke call failed"}; console.log(responseData.Error + ":\n", err); } else responseStatus = "SUCCESS"; response.send(event, context, responseStatus, responseData); }); }; Description: Invoke a function to create a log stream. MemorySize: 128 Timeout: 8 Role: !GetAtt role.Arn Tracing: Active
如果未在範本中定義自訂資源調用的函數,您可以從 AWS CloudFormation 使用者指南中的 cfn-response
cfn-response 模組取得 的原始碼。
如需自訂資源的詳細資訊,請參閱 AWS CloudFormation 使用者指南中的自訂資源。