Кажется, я не могу найти документацию, которая поможет мне загрузить zip-файл из aws s3 в экземпляр, использующий terraform, может ли кто-нибудь помочь мне найти решение этого?
Спасибо.
Существуют различные способы загрузки файла с S3 в зависимости от ваших потребностей.
remote-exec
поставщик. Этот MIME
агностик.resource "aws_instance" "web" {
## [...]
provisioner "remote-exec" {
command = "curl -XGET [...]"
}
}
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)}",
]
}
}
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
}
}
http
провайдер также.user_data_scripts
из cloud-init
. В Интернете есть множество проблем и подобных тем. (Форум разработчиков AWS; пример загрузка с аутентификацией с помощью Cloudformation)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 нет ресурса, который бы это делал
Ваш вопрос непонятен.
Предполагая, что вам не нужен файл в Terraform, я бы предложил написать сценарий облачной инициализации для загрузки файла. Используйте Terraform для настройки всех разрешений IAM и записи сценария в пользовательские данные экземпляра. Затем во время загрузки сервер запускает cloud-init и загружает файл с помощью curl
/wget
(из общедоступных URL) или с aws s3
(аутентифицировано через профиль экземпляра).