AWS CloudWatch, запускающий выполнение CodePipeline, работает в одной учетной записи, но не в другой - PullRequest
0 голосов
/ 24 февраля 2019

мы используем две учетные записи AWS, одну для разработки (dev) и одну для производства (prod) и одну основную AWS CodePipeline .

Этот основной конвейер - , работающий в prod в данный момент - встраивает наше приложение в образ Docker и помещает его в репозиторий ECR в dev, и оттуда должен быть запущен отдельный конвейер, чтобы начать развертывание вECS в dev.Если развертывание успешно завершено в ECS dev, в конвейере 1 выполняется шаг ручного утверждения для продвижения контейнера в продукт ECR, который запускает развертывание в продукт ECS.

Теперь существует проблема:

Мы используем правила событий CloudWatch для запуска двух конвейеров развертывания, и правило проверяет наличие "PutImage" , поступающего из CloudTrail.

Это работает только для изображений, которыепопасть в ECR в prod, но НЕ в dev. Правила просто не срабатывают, хотя я могу видеть события в Cloudtrail в dev.

В чем может быть проблема?Используя Terraform, настройки для dev и prod идентичны.

Сначала я подумал, что конвейеру, работающему в prod, возможно, потребуется иметь возможность отправлять события в dev (https://aws.amazon.com/about-aws/whats-new/2017/06/cloudwatch-events-adds-cross-account-event-delivery-support/),, но это маловероятно, поскольку я уже вижу события в CloudTrail dev.

Может быть, потому, что сам конвейер работает в prod?

Конвейер 1: Git приложения -> Сборка Docker и push ECR ECR - если развертывание в dev успешно: ручное утверждение -> push to prod ECR

Конвейер 2 (НЕ ТРИГГЕРИРОВАН) Источник Alibi git -> получить новейший тег изображения из ECR dev, вывести imagedefinitions.json -> input imagedefinitions.json, развернуть в ECS dev

Конвейер 3 (ПРАВИЛЬНО ПРАВИЛЬНО ПОСЛЕ УТВЕРЖДЕНИЯ РУКОВОДСТВА) Источник Alibi git -> получить новейший тег изображения из ECR pro, вывести файл imagedefinitions.json -> input imagedefinitions.json, развернуть в ECS prod

Мыиспользование alibi git source, потому что Codepipeline требует источника в начале, поэтому мы проверяем репозиторий, но получение новейшего тега изображения из ECR является важным шагомe.

Правило события Cloudwatch, которое работает для prod, но не для dev :

resource "aws_cloudwatch_event_rule" "latest_image" {
  name        = "latest-image"
  description = "Capture push to ECR"

  event_pattern = <<PATTERN
{
  "source": [
    "aws.ecr"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ecr.amazonaws.com"
    ],
    "eventName": [
      "PutImage"
    ],
    "awsRegion": [
      "${var.region}"
    ],
    "requestParameters": {
      "repositoryName": [
        "${var.application_name}"
      ],
      "registryId": [
        "${var.account_id}"
      ]
    }
  }
}

Большое спасибо за любую помощь!

...