在AWS Lambda函数中使用sendResponse函数发送响应,以告知CloudFormation成功还是失败。
以下是示例代码:
exports.handler = function(event, context, callback) {
// 在Lambda函数中处理事件
// 在处理完成后,使用sendResponse向CloudFormation发送响应
var responseStatus = "SUCCESS";
var responseData = {};
var physicalResourceId = "myResourceId";
try {
// 处理事件代码
} catch (err) {
responseStatus = "FAILED";
responseData = {"Error": err};
}
sendResponse(event, context, responseStatus, responseData, physicalResourceId);
};
function sendResponse(event, context, responseStatus, responseData, physicalResourceId) {
var responseBody = JSON.stringify({
Status: responseStatus,
Reason: "See the details in CloudWatch Log Stream: " + context.logStreamName,
PhysicalResourceId: physicalResourceId || context.logStreamName,
StackId: event.StackId,
RequestId: event.RequestId,
LogicalResourceId: event.LogicalResourceId,
Data: responseData
});
var https = require("https");
var url = require("url");
var parsedUrl = url.parse(event.ResponseURL);
var options = {
hostname: parsedUrl.hostname,
port: 443,
path: parsedUrl.path,
method: "PUT",
headers: {
"Content-Type": "",
"Content-Length": responseBody.length
}
};
var request = https.request(options, function(response) {
context.done();
});
request.on("error", function(error) {
console.log("sendResponse Error: ", error);
context.done();
});
request.write(responseBody);
request.end();
}
在Lambda函数中,您可以在处理事件后使用sendResponse函数发送响应。它会将响应状态、有关事件的一些信息以及有关响应的其他信息打包到JSON中,并使用HTTPS PUT将其发送回CloudFormation。然后,在CloudFormation中,您可以使用“Success”或“Failed”作为返回值,以显示Lambda函数是否成功更新堆栈。这将