[英]How to run ansible inside virtualenv with terraform local-exec provisioner
[英]How to run sudo in terraform "local-exec" block
我有一个问题,在本地 exec 中添加 sudo 继续运行。
简而言之,没有 local-exec 块。 我能够创建和访问我的 EC2 实例。 使用 ssh -vi path/to/key.pem ec2-user@ec2-xx-xx-xxx-xxx.compute-1.amazonaws.com。
但是现在只要我添加下面的块; 并运行apply
它在密码提示后一直显示“仍在创建”。
provisioner "local-exec" {
command = <<EOH
sudo yum -y update
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
EOH
}
所以,我的问题是这里的 sudo 用户是哪个用户? 是 ec2-user 还是我最初创建的用于设置 AWS 的用户(仅包含访问密钥 ID 和秘密访问密钥)?
我该如何设置它,有什么文档可以参考吗?
下面是我的 main.tf
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
命令在您的机器上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 文档在这里。
这是 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"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.