мы используем две учетные записи 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}"
]
}
}
}
Большое спасибо за любую помощь!