Terraform: Как принудительно обновить ресурс после запуска нулевого ресурса?

#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. Сертификат создается в конце, а затем больше не загружается.