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

Amazon web services 如何使用terraform从创建的实例创建AWS AMI?,amazon-web-services,terraform,Amazon Web Services,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}"

我正在使用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"
  }

}
提供程序“aws”{
region=“${var.region}”
access_key=“${var.access_key}”
secret\u key=“${var.secret\u key}”
}
资源“aws_实例”“测试wordpress”{
ami=“${var.image\u id}”
instance_type=“${var.instance_type}”
key_name=“测试网站”
#关联\公共\ ip\地址=是

user_data=因此您可以按照中所述的标记搜索AMI

就你而言:

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

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

然后将ID称为
${data.aws\u ami.example.image\u ID}

值得指出的是,Hashicorp(Terraform的制造商)也生产,这是专门为准备ami和其他机器映像而设计的。它可能会提供比试图在Terraform中拼凑相同的东西更好的体验。
data“aws\u实例”“测试wordpress实例”{“过滤器”{name=“tag:name”值=[“测试wordpress服务器”]依赖于=[“aws\u实例.测试wordpress”]}
如下配置。但它不会在开始时创建实例并查找已创建的实例。获取错误。错误:您的查询未返回任何结果。请更改搜索条件并重试。是否有方法在执行数据源之前强制创建实例?您使用了错误的标记。您的ami标记为“测试wordpress ami“不是”测试wordpress服务器