繁体   English   中英

如何使用 terraform 从创建的实例创建 AWS AMI?

[英]How to create AWS AMI from created instance using terraform?

我正在使用 wordpress 安装设置一个 aws 实例,并想使用创建的实例创建一个 AMI。 下面我附上我的代码。

provider "aws" {

    region = "${var.region}"
    access_key = "${var.access_key}"
    secret_key = "${var.secret_key}"
}

resource  "aws_instance" "test-wordpress" {

    ami = "${var.image_id}"
    instance_type = "${var.instance_type}"
    key_name = "test-web"
    #associate_public_ip_address = yes

    user_data = <<-EOF

      #!/bin/bash

      sudo yum update -y
      sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
      sudo yum install -y httpd mariadb-server
      cd /var/www/html
      sudo echo "healthy" > healthy.html
      sudo wget https://wordpress.org/latest.tar.gz
      sudo tar -xzf latest.tar.gz
      sudo cp -r wordpress/* /var/www/html/
      sudo rm -rf wordpress
      sudo rm -rf latest.tar.gz
      sudo chmod -R 755 wp-content
      sudo chown -R apache:apache wp-content
      sudo service httpd start
      sudo chkconfig httpd on

      EOF


    tags = {
      Name = "test-Wordpress-Server"
    }
} 


resource  "aws_ami_from_instance" "test-wordpress-ami" {
    name               = "test-wordpress-ami"
    source_instance_id = "${aws_instance.test-wordpress.id}"

  depends_on = [
      aws_instance.test-wordpress,
      ]

  tags = {
      Name = "test-wordpress-ami"
  }

}

AMI 将被创建,但是当我使用该 AMI 创建另一个实例 wordpress 安装时,不在那里。 我该如何解决这个问题?

因此,您可以按照文档中的描述通过标签搜索 AMI

在你的情况下:

data "aws_ami" "example" {
  executable_users = ["self"]
  most_recent      = true
  owners           = ["self"]

  filter {
    name   = "tag:Name"
    values = ["test-wordpress-ami"]
  }
}

然后将 ID 引用为${data.aws_ami.example.image_id}

我认为创建 AMI 图像的最佳方法是使用 Packer,也来自 Hashicorp,如 terraform。

什么是打包机?

带有 Packer 的 Provision Infrastructure Packer 是 HashiCorp 的开源工具,用于从源配置创建机器映像。 您可以使用操作系统和软件为您的特定用例配置 Packer 映像。

Packer 创建一个具有临时密钥对、security_group 和 IAM 角色的实例。 在供应商“shell”中,可以自定义内联命令。 之后,您可以将此 ami 与您的 terraform 代码一起使用。

示例脚本可能如下所示:

packer {
  required_plugins {
    amazon = {
      version = ">= 0.0.2"
      source  = "github.com/hashicorp/amazon"
    }
  }
}

source "amazon-ebs" "linux" {
  # AMI Settings
  ami_name                      = "ami-oracle-python3"
  instance_type                 = "t2.micro"
  source_ami                    = "ami-xxxxxxxx"
  ssh_username                  = "ec2-user"
  associate_public_ip_address   = false
  ami_virtualization_type       = "hvm"
  subnet_id                     = "subnet-xxxxxx" 
  
  launch_block_device_mappings {
    device_name = "/dev/xvda"
    volume_size = 8
    volume_type = "gp2"
    delete_on_termination = true
    encrypted = false
  }

  # Profile Settings
  profile                       = "xxxxxx"
  region                        = "eu-central-1"
}

build {
  sources = [
    "source.amazon-ebs.linux"
  ]
  provisioner "shell" {
    inline = [
        "export no_proxy=localhost"
    ]
  }
}

您可以在此处找到文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM