我有一个问题,在本地exec中添加sudo继续运行。
所以简而言之没有local-exec块。我能够创建和访问我的EC2实例。使用ssh -vi path / to / key.pem [email protected]。
但是现在我在下面添加块;并运行apply
它会在密码提示后继续显示“仍在创建”。
provisioner "local-exec" {
command = <<EOH
sudo yum -y update
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
EOH
}
所以,我的问题是哪个用户是sudo用户?是ec2用户还是我最初创建用于设置AWS的用户(仅包括访问密钥ID和秘密访问密钥)?
我该如何设置,是否有任何文档可供参考?
下面是我的主要文件
provider "aws" {
region = "us-east-2"
version = "~> 1.2.0"
}
resource "aws_instance" "hello-world" {
ami = "ami-ef92b08a"
instance_type = "t2.micro"
provisioner "local-exec" {
command = <<EOH
sudo yum -y update
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
EOH
}
tags {
Name = "my-aws-terraform-hello-world"
}
}
resource "aws_security_group" "allow-tcp" {
name = "my-aws-terraform-hello-world"
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
创建实例后,local-exec
中的命令会在您的计算机上本地运行。使用remote-exec
如下所示在EC2实例上运行命令。
connection {
type = "ssh"
user = "ec2-user"
host = "${self.private_ip}"
private_key = "${file("/path/to/your/pemfile")}"
agent = true
}
然后你可以指定remote-exec块
provisioner "remote-exec" {
inline = [
"sudo yum -y update",
"sudo yum install -y python36 python36-libs python36-devel python36-pip",
]
}
如果多个远程配置器位于外部块中,则它们可以使用相同的连接块。
由于这是一个EC2实例,我建议您使用USER_DATA,这将作为图像创建的一部分运行。 AWS docs here。
这是Terraform的user_data财产。
以下是如何实现您正在做的事情,因为USER_DATA以root身份运行,您不需要sudo。
resource "aws_instance" "web" {
ami = "hello-world"
instance_type = "t2.micro"
user_data = <<-EOF
#!/bin/bash
yum -y update
yum install -y python36u python36u-libs python36u-devel python36u-pip
EOF
tags {
Name = "my-aws-terraform-hello-world"
}
}