Как запустить sudo в блоке terraform "local-exec" - PullRequest
0 голосов
/ 29 марта 2019

У меня проблема с добавлением sudo в локальный exec.

Короче говоря, без блока local-exec. Я могу создать и получить доступ к своему экземпляру EC2. используя путь ssh -vi / 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-пользователь или пользователь, которого я изначально создал для настройки своего AWS (который включает только идентификатор ключа доступа и секретный ключ доступа)?

Как я могу настроить его, есть ли какая-либо документация для справки?

ниже мой 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"]
  }
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Поскольку это экземпляр EC2, я бы рекомендовал вам использовать USER_DATA, это будет выполняться как часть создания образа.Документы AWS здесь .

Вот свойство user_data для Terraform.

Вот как вы добьетесь того, что вы делаете, и после 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"
  }
}
0 голосов
/ 29 марта 2019

Команды внутри local-exec запускаются локально на вашем компьютере после создания экземпляра.Используйте remote-exec, как показано ниже, для запуска ваших команд на экземпляре EC2.

connection {
type     = "ssh"
user     = "ec2-user"
host = "${self.private_ip}"
private_key  = "${file("/path/to/your/pemfile")}"
agent = true

}

, затем вы можете указать блок удаленного исполнения

provisioner "remote-exec" {
inline = [
  "sudo yum -y update",
  "sudo yum install -y python36 python36-libs python36-devel python36-pip",
]

}

Несколько удаленных провайдеров могут использовать один и тот же блок соединения, если он находится во внешнем блоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...