Назад | Перейти на главную страницу

использование terraform для загрузки zip-файла из aws s3

Кажется, я не могу найти документацию, которая поможет мне загрузить zip-файл из aws s3 в экземпляр, использующий terraform, может ли кто-нибудь помочь мне найти решение этого?

Спасибо.

Существуют различные способы загрузки файла с S3 в зависимости от ваших потребностей.


  • Вариант 1.1. Ты можешь использовать remote-exec поставщик. Этот MIME агностик.
resource "aws_instance" "web" {
  ## [...]

  provisioner "remote-exec" {
    command = "curl -XGET [...]"
  }
}
  • Вариант 1.2. Ты можешь использовать null_resource с правильным спусковым крючком.
resource "null_resource" "cluster" {
  # Changes to any instance of the cluster requires re-provisioning
  triggers = {
    cluster_instance_ids = "${join(",", aws_instance.cluster.*.id)}"
  }

  # Bootstrap script can run on any instance of the cluster
  # So we just choose the first in this case
  connection {
    host = "${element(aws_instance.cluster.*.public_ip, 0)}"
  }

  provisioner "remote-exec" {
    # Bootstrap script called with private_ip of each node in the cluster
    inline = [
      "bootstrap-cluster.sh ${join(" ", aws_instance.cluster.*.private_ip)}",
    ]
  }
}

  • Вариант 2.1. Ты можешь использовать file и aws_s3_bucket_object ресурс данных.

Он отлично работает с текстовыми файлами.

data "aws_s3_bucket_object" "secret_key" {
    bucket = "awesomecorp-secret-keys"
    key    = "awesomeapp-secret-key"
}

resource "aws_instance" "web" {
  ## [...]
  provisioner "file" {
    content     = data.aws_s3_bucket_object.secret_key.body
    destination = /tmp/file
  }
}

resource "aws_instance" "web" {
  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t2.micro"
  user_data     = [...]

  tags = {
    Name = "HelloWorld"
  }
}

Не забудьте дать экземпляру Роль IAM с соответствующими разрешениями, если вы выполняете команду из экземпляра или даете соответствующие разрешения роли, которая выполняет Terraform.

Примечание: Сказал, что я сомневаюсь Terraform лучший выбор, например, для обеспечения. Взгляни на SaltStack, Ansible или Повар. Это инструменты, предназначенные для работы с инициализацией экземпляров.

Непонятно, но я думаю, вы спрашиваете, как загрузить файл в экземпляр, который вы создали с помощью terraform?

Это должно быть сделано с помощью сценария user_data или программного обеспечения для управления конфигурацией в образе вашего экземпляра. В terraform нет ресурса, который бы это делал

Ваш вопрос непонятен.

  1. Чего ты хочешь добиться? (т.е. зачем вам zip-файл? это конфигурация, развертывание или что-то еще)
  2. Это вообще вопрос Terraform? (т.е. вам нужен этот zip-файл во время запуска Terraform? или Terraform - ваш единственный молот, и вы ищете что-то еще?)
  3. что ты уже испробовал?

Предполагая, что вам не нужен файл в Terraform, я бы предложил написать сценарий облачной инициализации для загрузки файла. Используйте Terraform для настройки всех разрешений IAM и записи сценария в пользовательские данные экземпляра. Затем во время загрузки сервер запускает cloud-init и загружает файл с помощью curl/wget (из общедоступных URL) или с aws s3 (аутентифицировано через профиль экземпляра).