运行 带有 Terraform remote-exec 的简单网络服务器
Run simple web server with Terraform remote-exec
# example.tf
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "example" {
ami = "ami-0d44833027c1a3297"
instance_type = "t2.micro"
security_groups = ["${aws_security_group.example.name}"]
key_name = "${aws_key_pair.generated_key.key_name}"
provisioner "remote-exec" {
inline = [
"cd /home/ubuntu/",
"nohup python3 -m http.server 8080 &",
]
connection {
type = "ssh"
private_key = "${tls_private_key.example.private_key_pem}"
user = "ubuntu"
timeout = "1m"
}
}
}
resource "tls_private_key" "example" {
algorithm = "RSA"
rsa_bits = 4096
}
resource "aws_key_pair" "generated_key" {
key_name = "example_key_pair"
public_key = "${tls_private_key.example.public_key_openssh}"
}
resource "aws_security_group" "example" {
name = "grant ssh"
description = "grant ssh"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
ami-0d44833027c1a3297
是一个 ubuntu AMI,带有一个 hello world index.html,位于 /home/ubuntu/
虽然,我没有收到任何错误,并且 ec2 实例已启动并且 运行正在运行,但 http 服务器没有 运行。
注意:如果我手动 ssh 并在内联部分应用同一组命令,我能够成功 运行 http 服务器。如有任何帮助,我们将不胜感激!
修复:
inline = [
....
"sleep 20",
]
我相信供应商在服务器进程开始之前退出(竞争条件),因此睡眠是必要的。
注意:睡眠的概念来自 Hashicorp Packer 文档(https://www.packer.io/docs/provisioners/shell.html)
# example.tf
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "example" {
ami = "ami-0d44833027c1a3297"
instance_type = "t2.micro"
security_groups = ["${aws_security_group.example.name}"]
key_name = "${aws_key_pair.generated_key.key_name}"
provisioner "remote-exec" {
inline = [
"cd /home/ubuntu/",
"nohup python3 -m http.server 8080 &",
]
connection {
type = "ssh"
private_key = "${tls_private_key.example.private_key_pem}"
user = "ubuntu"
timeout = "1m"
}
}
}
resource "tls_private_key" "example" {
algorithm = "RSA"
rsa_bits = 4096
}
resource "aws_key_pair" "generated_key" {
key_name = "example_key_pair"
public_key = "${tls_private_key.example.public_key_openssh}"
}
resource "aws_security_group" "example" {
name = "grant ssh"
description = "grant ssh"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
ami-0d44833027c1a3297
是一个 ubuntu AMI,带有一个 hello world index.html,位于 /home/ubuntu/
虽然,我没有收到任何错误,并且 ec2 实例已启动并且 运行正在运行,但 http 服务器没有 运行。
注意:如果我手动 ssh 并在内联部分应用同一组命令,我能够成功 运行 http 服务器。如有任何帮助,我们将不胜感激!
修复:
inline = [
....
"sleep 20",
]
我相信供应商在服务器进程开始之前退出(竞争条件),因此睡眠是必要的。
注意:睡眠的概念来自 Hashicorp Packer 文档(https://www.packer.io/docs/provisioners/shell.html)