amazon-web-services - 从云形成中创建给定 EC2 的 AMI

标签 amazon-web-services amazon-ec2 aws-cloudformation amazon-ami ec2-ami

我必须从 cloudformation 创建给定 EC2 实例的 AMI,然后从该 AMI 创建 ec2。这个怎么做?我的主要问题是第一部分

最佳答案

以下代码是一个函数,可以作为 CustomResource 调用以创建 AMI。

我已经很长时间没有使用它了,但它应该仍然可以工作。

您的 CustomResource 将需要传入 RegionInstance(以及 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/

相关文章:

amazon-web-services - 通过 Cloudformation 使用函数 URL 部署 AWS Lambda

ruby-on-rails - 将静态 JSON 数据导出到 Amazon S3 并通过 AJAX 检索它

amazon-ec2 - 如何将文件和文件夹上传到 AWS EC2 实例?

amazon-ec2 - 在 Cloudformation Template 中为子网添加辅助 CIDR block 的示例

amazon-web-services - 如何在 CloudFormation 脚本中获取当前日期?

amazon-web-services - AWS CloudFormation 将 SNS 仅限制到特定 SQS 队列

amazon-web-services - 如何使用创建配置文件的 CloudFormation 模板创建 LaunchConfiguration?

amazon-web-services - AWS Cognito - 凭证问题

spring - 为什么 Spring boot war 文件只能在 localhost 中使用 artifactId 而不能在 AWS Elastic BeanStalk 中使用?

php - MySQL 不显示在 phpMyAdmin 中创建的数据库