我必须从 cloudformation 创建给定 EC2 实例的 AMI,然后从该 AMI 创建 ec2。这个怎么做?我的主要问题是第一部分
最佳答案
以下代码是一个函数,可以作为 CustomResource 调用以创建 AMI。
我已经很长时间没有使用它了,但它应该仍然可以工作。
您的 CustomResource 将需要传入 Region
和 Instance
(以及 Tags
,如果您需要的话)。
为了从中创建新的 EC2 实例,您需要使用 ImageId
的返回值并将其作为 AMI 输入到 AWS::EC2::Instance。
var Aws = require("aws-sdk");
var Response = require('cfn-response');
exports.handler = function (e, c) {
console.log("REQUEST RECEIVED:\n" + JSON.stringify(e));
// For Delete requests, immediately send a SUCCESS response.
if (e.RequestType === "Delete") {
Response.send(e, c, Response.SUCCESS);
return;
}
console.log("Region=" + e.ResourceProperties.Region);
console.log("Instance=" + e.ResourceProperties.Instance);
var ec2 = new Aws.EC2({ region: e.ResourceProperties.Region });
console.log("ec2=" + ec2);
console.log("Tags=" + e.ResourceProperties.Tags);
var params = {
InstanceId: e.ResourceProperties.Instance,
Name: e.ResourceProperties.AmiName
};
console.log("params=" + params);
console.log("params.InstanceIds=" + params.InstanceIds);
var responseStatus = "FAILED";
ec2.createImage(params, function (err, data) {
if (err) {
console.log("createImage.err:" + err.toString(), err.stack.toString());
Response.send(e, c, Response.FAILED);
} // an error occurred
else {
console.log("createImage" + data);
responseStatus = "SUCCESS";
var responseData = {};
responseData["ImageId"] = data.ImageId;
var tagParams = {
Resources: [data.ImageId],
Tags: e.ResourceProperties.Tags
}
ec2.createTags(tagParams, function (err, data) {
if (err) {
data = { Error: "DescribeImages call failed" };
console.log(data.Error + ":\n", err);
Response.send(e, c, Response.FAILED);
} else {
console.log(data);
Response.send(e, c, Response.SUCCESS, responseData);
}
});
}
});
};
关于amazon-web-services - 从云形成中创建给定 EC2 的 AMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71406744/