Size: a a a

2021 June 11

ДД

Дима Доценко... in terraform_ru
похоже действительно на какой-то баг, но где именно?)
источник

AK

Andrey Kartashov in terraform_ru
проверь стейт после apply
источник

AK

Andrey Kartashov in terraform_ru
поменялся ли порядок
источник

AK

Andrey Kartashov in terraform_ru
я же не ошибаюсь, tf хранит data в стейте?
источник

AK

Andrey Kartashov in terraform_ru
иначе бы как он увидел изменения
источник

AK

Andrey Kartashov in terraform_ru
можно попробовать руками стейт поменять (порядок) и проверить plan
источник

ДД

Дима Доценко... in terraform_ru
неа, порядок такой как должен быть в терраформ полиси, значит бажина где-то в другом месте, либо у апишки амазона какой-то свой порядок
источник

AR

Alexey Remizov in terraform_ru
А изменение-то в каком ресурсе?
источник

AK

Andrey Kartashov in terraform_ru
кстати да. Я так подумал, что это где-то в data.aws_caller_identity
источник

ДД

Дима Доценко... in terraform_ru
в ресурсе aws_sqs_queue в аттрибуте policy, т.е полиси сначала добавилась туда нормально, а последующие apply вызывают такую проблему
источник

AR

Alexey Remizov in terraform_ru
Обновиться может? Открыл доку по последней версии, там в aws_sqs_queue.policy вообще строка ожидается. Хотя и в формате json.
источник

ДД

Дима Доценко... in terraform_ru
только что тестил с последней версией провайдера и https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document, проблема та же(
источник

AK

Andrey Kartashov in terraform_ru
в ресурсе или в дате aws_sqs_queue?
источник

AR

Alexey Remizov in terraform_ru
А дифф-то откуда? Я что ли отстал, а терраформ уже дифы текста значения показывает?
источник

AK

Andrey Kartashov in terraform_ru
приведи полный выхлоп и ту часть кода с ресурсом, который меняется
источник

ДД

Дима Доценко... in terraform_ru
module "sqs" {
 source  = "terraform-aws-modules/sqs/aws"
 version = "~> 2.0"

 depends_on = [
   module.sqs_dlq
 ]

 for_each = local.queues_sorted

 name = "${var.prefix}-${var.environment}-sqs-${var.application}-${each.key}"
 policy                    = data.aws_iam_policy_document.sqs_policy[each.key].json
}

 # module.sqs["function-name"].aws_sqs_queue.this[0] has been changed
 ~ resource "aws_sqs_queue" "this" {
       name                              = "infra-dev-sqs-function-name"
     ~ policy                            = jsonencode(
         ~ {
             ~ Statement = [
                 ~ {
                     ~ Principal = {
                         ~ AWS = [
                             - "arn:aws:iam::account-id:role/wr-infra-dev-role",
                               "arn:aws:iam::account-id:root",
                             + "arn:aws:iam::account-id:role/wr-infra-dev-role",
                           ]
                       }
                       # (4 unchanged elements hidden)
                   },
               ]
               # (2 unchanged elements hidden)
           }
       )
       # (12 unchanged attributes hidden)
   }

модуль terraform-aws-modules/sqs/aws просто обертка над самим ресурсом очереди, для удобства output, проблема не должна быть в нем насколько понимаю)
https://github.com/terraform-aws-modules/terraform-aws-sqs/blob/master/main.tf
источник

ДД

Дима Доценко... in terraform_ru
как можно код удобнее пошарить, через pastebin?
источник

ДД

Дима Доценко... in terraform_ru
data "aws_iam_policy_document" "sqs_policy" {
 for_each  = var.queues_list
 policy_id = "sqs_${each.key}"
 statement {
   sid    = "AllowSendReceiveFromOwnAccount"
   effect = "Allow"
   principals {
     type = "AWS"
     identifiers = [
       data.aws_caller_identity.current.account_id,
       "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/${var.prefix}-${var.environment}-role-${var.application}"
     ]
   }
   actions = [
     "sqs:ChangeMessageVisibility",
     "sqs:DeleteMessage",
     "sqs:GetQueueUrl",
     "sqs:ReceiveMessage",
     "sqs:SendMessage"
   ]
   resources = ["arn:aws:sqs:*:${data.aws_caller_identity.current.account_id}:${var.prefix}-${var.environment}-sqs-${var.application}-${each.key}"]
 }
 dynamic "statement" {
   for_each = each.value.sns_topic != null ? [1] : []

   content {
     sid    = "AllowSendFromSnsSubscriptionTopic"
     effect = "Allow"
     principals {
       type        = "Service"
       identifiers = ["sns.amazonaws.com"]
     }
     actions = [
       "sqs:SendMessage"
     ]
     resources = [
       "arn:aws:sqs:*:${data.aws_caller_identity.current.account_id}:${var.prefix}-${var.environment}-${var.application}-${each.key}",
       "arn:aws:sqs:*:${data.aws_caller_identity.current.account_id}:${var.prefix}-${var.environment}-sqs-${var.application}-${each.key}",
     ]
     condition {
       test     = "ArnEquals"
       variable = "aws:SourceArn"
       values   = [each.value.sns_topic]
     }
   }
 }
}

а вот сама полися, проблема есть даже если пихать ее просто в aws_sqs_queue ресурс инлайном, без промежуточного этого data ресурса с полиси
источник

AK

Andrey Kartashov in terraform_ru
ясненько
источник

AK

Andrey Kartashov in terraform_ru
значит амазон порядок меняет
источник