Terraform v0.12.x
我正在使用 aws_instance
资源创建一个 AWS EC2 实例,并且我想在目标内提取一个 Docker 镜像(我已使用正确的 AWS 凭证对其进行了设置)。我看到了 docker_image 资源,但是它在我的笔记本电脑上拉取图像,而不是在目标上。
如何在目标上拉取 docker 镜像?我知道我可以使用 user_data,但是还有其他方法吗?
谢谢。
最佳答案
这是可以的,下面的例子是基于this repo 协议(protocol)。
main.tf -
provider "aws" {
region = "ap-southeast-1"
}
# Creating key_pair for SSH in AWS instance
resource "tls_private_key" "createkey" {
algorithm = "RSA"
rsa_bits = 4096
}
resource "aws_key_pair" "generated_key" {
key_name = "terraform-key"
public_key = tls_private_key.createkey.public_key_openssh
}
resource "null_resource" "savekey" {
depends_on = [
tls_private_key.createkey,
]
provisioner "local-exec" {
command = "echo '${tls_private_key.createkey.private_key_pem}' > wordpress_key.pem"
}
}
# Creating AWS EC2 Instance with previously created key pair and security group
resource "aws_instance" "webserver" {
# Change ami id according to your region
# https://github.com/losDaniel/spot-connect/blob/d474cbbf8c2aa02127c445c303d0ac435d88a0d2/build/lib/spot_connect/data/ami_data.csv
ami = "ami-0fe1ff5007e7820fd"
instance_type = "t2.micro"
key_name = aws_key_pair.generated_key.key_name
security_groups = [ "open" ] # your security group name
connection {
type = "ssh"
user = "ec2-user"
private_key = tls_private_key.createkey.private_key_pem
host = aws_instance.webserver.public_ip
}
provisioner "remote-exec" {
inline = [
"sudo yum update -y",
"sudo yum install git -y",
"sudo yum install docker -y",
"sudo service docker start",
"sudo usermod -a -G docker ec2-user",
"sudo curl -L \"https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose",
"sudo chmod +x /usr/local/bin/docker-compose",
"docker pull mysql:5.7",
"docker pull wordpress",
"docker pull phpmyadmin/phpmyadmin",
"mkdir wordpress_data"
]
}
tags = {
Name = "terraform-docker-pull"
}
}
# Storing IP address in file
resource "null_resource" "getIp" {
provisioner "local-exec" {
command = "echo ${aws_instance.webserver.public_ip} > publicip.txt"
}
}
如果您想针对不同的区域工作,请相应地更新 ami。
验证 docker 已拉入机器:
关于amazon-web-services - 在 terraform 中,如何在目标上拉取 Docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64809479/