繁体   English   中英

如何在 terraform “local-exec” 块中运行 sudo

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM