本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 資源名稱 (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:: 無伺服器:: 函式資源類型。 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
如果自定義資源調用的函數未在模板中定義,則可以cfn-response
從用戶指南的 cfn-response 模塊中獲取源代碼。 AWS CloudFormation
如需自訂資源的詳細資訊,請參閱 AWS CloudFormation 使用者指南中的自訂資源。