Как использовать url user_data при создании экземпляра AWS в terraform? - PullRequest
0 голосов
/ 18 февраля 2020

Terraform Version = 0.12

data "template_file" "user_data" {
  template = file("${path.module}/userdata.sh")
}

resource "aws_instance" "bespin-ec2-web-a" {
  ami = "ami-0bea7fd38fabe821a"
  instance_type = "t2.micro"
  vpc_security_group_ids = [aws_security_group.bespin-sg.id]
  subnet_id = aws_subnet.bespin-subnet-public-a.id
  associate_public_ip_address = true
  tags = {
    Name = "bespin-ec2-web-a"
  }
  user_data = data.template_file.user_data.rendered
}

Я хочу загрузить user_data на S3 и использовать его, вызывая URL. Что я могу сделать?

ex)

resource "template_file" "userdata_sh" {
  template = "https://test.s3.ap-northeast-2.amazonaws.com/userdata.sh"
}

1 Ответ

1 голос
/ 18 февраля 2020

Не на 100% ясно, что должно быть достигнуто, однако, если указать пользовательские данные для используемых экземпляров EC2, то использование файла sh в S3 будет невозможно.

Необходимо указать содержимое пользовательских данных непосредственно к ресурсу aws_instance terraform.

EC2 / userdata

resource "aws_instance" "this" {
  ami = "${local.ami_this_id}"
  instance_type = "${var.instance_type}"
  subnet_id = "${var.subnet_id}"
  vpc_security_group_ids = "${var.security_group_ids}"
  key_name = "${aws_key_pair.this.key_name}"
  iam_instance_profile = "${var.ec2_instance_profile_id}"

  user_data = data.template_file.user_data.rendered   # <----- Specify userdata content

  root_block_device {
    volume_type = "${var.root_volume_type}"
    volume_size = "${var.root_volume_size}"
    delete_on_termination = true
  }
}

Если это будет загрузка на S3 и копирование его в экземпляр EC2 и запуск его в качестве сценария оболочки, тогда не потребуется загрузить в S3, а затем скопировать его в экземпляры EC2 с помощью команд AWS CLI S3 или смонтировать ведро S3 внутри EC2 с помощью, например, предохранителя S3.

Загрузка S3

Сначала используйте https://www.terraform.io/docs/providers/local/r/file.html

resource "local_file" "userdata_sh" {
  content  = data.template_file.user_data.rendered
  filename = "your_local_userdata_sh_path"
}

Затем используйте https://www.terraform.io/docs/providers/aws/r/s3_bucket_object.html для загрузки на S3.

resource "aws_s3_bucket_object" "object" {
  bucket = "your_s3_bucket_name"
  key    = "userdata.sh"
  source = "your_local_userdata_sh_path"

  etag = "${filemd5("your_local_userdata_sh_path")}"
}

URL в ресурсе шаблона

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

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