【问题标题】:Terraform: How to copy files from s3 to ec2Terraform:如何将文件从 s3 复制到 ec2
【发布时间】:2021-03-23 04:18:54
【问题描述】:
我有一个 terraform 配置,它创建了一个 autoscaling group 和一个 launch configuration 以及一个 s3 bucket 并使用多个文件填充存储桶。
考虑到 s3 bucket 的名称在创建后才会知道,有没有办法将文件从 s3 bucket 复制到 ec2 instance?
ec2 instance 有一个具有正确权限的iam profile。我的绊脚石是直到创建时间才知道存储桶名称,所以我不确定我是否通过user_data 完成此操作
【问题讨论】:
标签:
amazon-s3
amazon-ec2
terraform
user-data
terraform0.12+
【解决方案1】:
您可以尝试在depends_on aws_instance 资源中指定存储桶资源。
resource "aws_instance" "instance" {
...
user_data = <<-EOT
BUCKET_URL=${aws_s3_bucket.bucket_domain_name}
s3 cp s3://$BUCKET_NAME/ ./ --recursive
EOT
}
如果我错了就打我,但我认为this link 会有所帮助
【解决方案2】:
你的 terraform 脚本应该是这样的
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "myBucket" {
bucket = "${var.my_bucket_name}"
acl = "private"
tags = {
Name = "My bucket"
Environment = "Dev"
}
}
data "template_file" "user_data" {
template = "${file("${path.module}/templates/user_data.sh")}"
vars = {
aws_s3_bucket = "${var.my_bucket_name}"
}
}
resource "aws_launch_configuration" "launch" {
name_prefix = "my-launch-config"
image_id = "${var.aws_ami}"
instance_type = "${var.instance_type}"
security_groups = ["${aws_security_group.instance.id}"]
user_data = "${data.template_file.user_data.rendered}"
iam_instance_profile = "${aws_iam_instance_profile.ecs.name}"
lifecycle {
create_before_destroy = true
}
depends_on = ["aws_s3_bucket.myBucket"]
}
==========================
templates/user_data.sh
==========================
#!/bin/bash
s3 cp s3://${aws_s3_bucket}/ ./ --recursive