#amazon-web-services #terraform #terraform-provider-aws
#amazon-веб-сервисы #терраформирование #терраформ-провайдер-aws
Вопрос:
это мой терраформ-код:
resource "aws_s3_bucket_object" "file_upload" { for_each = fileset("init_conf/", "*") bucket = aws_s3_bucket.conf_bucket.id acl = "private" key = "config/${local.service_name}/${each.value}" source = "init_conf/${each.value}" source_hash = filemd5("init_conf/${each.value}") kms_key_id = "arn:aws:kms:##################:###################" server_side_encryption = "aws:kms" tags = merge(tomap({ "Name" = local.service_name, }), local.default_tags) } resource "null_resource" "cert" { triggers = { always_run = "${timestamp()}" } provisioner "local-exec" { command = "openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout ${path.cwd}/init_conf/${var.cname}.key -out ${path.cwd}/init_conf/${var.cname}.crt" } }
После выполнения terraform apply сначала обновляется статус: ресурса «aws_s3_bucket_object» «file_upload», и только затем выполняется: поставщик «local-exec». Однако я хочу, чтобы сначала был выполнен: поставщик «local-exec», который генерирует для меня сертификат и сохраняет его, и только затем загружает файл с: ресурсом «aws_s3_bucket_object» «file_upload».
Кто-нибудь может помочь ?
Комментарии:
1. Добавьте
depends_on
атрибут наaws_s3_bucket_object
.2. Как все прошло? До сих пор неясно, что вы можете сделать?
Ответ №1:
Вы можете добавить:
depends_on = [null_resource.cert]
к вашему aws_s3_bucket_object.file_upload
:
resource "aws_s3_bucket_object" "file_upload" { for_each = fileset("init_conf/", "*") bucket = aws_s3_bucket.conf_bucket.id acl = "private" key = "config/${local.service_name}/${each.value}" source = "init_conf/${each.value}" source_hash = filemd5("init_conf/${each.value}") kms_key_id = "arn:aws:kms:##################:###################" server_side_encryption = "aws:kms" depends_on = [null_resource.cert] tags = merge(tomap({ "Name" = local.service_name, }), local.default_tags) }
Комментарии:
1. Хорошая мысль, но, к сожалению, не работает. Вот результат терраформирования для этого:
module.fargate_deployment.aws_s3_bucket_object.file_upload["nginx.conf"]: Refreshing state... [id=config/backend/nginx.conf] module.fargate_deployment.aws_s3_bucket_object.file_upload[".gitkeep"]: Refreshing state... [id=config/backend/.gitkeep]
2. @Надежный Я не вижу никаких ошибок. Мне кажется, все в порядке.
3. И после этого:
module.fargate_deployment.null_resource.cert: Provisioning with 'local-exec'... module.fargate_deployment.null_resource.cert (local-exec): Executing: ["/bin/sh" "-c" "openssl req -new -newkey rsa.....................
4. @НАДеЖНЫЙ Вы, должно быть, неправильно использовали мой ответ, или ваш вопрос не соответствует вашему реальному коду.
5. Сертификат создается в конце, а затем больше не загружается.