Мое правило CloudWatch Event не запускает мой конвейер CodePipeline - PullRequest
0 голосов
/ 19 ноября 2018

У меня проблемы с AWS CloudWatch Events.

Я создаю конвейер CI CodePipeline с репозиторием CodeCommit в качестве источника, проект CodeBuild в качестве фазы сборки / тестирования (затем он развертывается в Lambda, но проблема не существует).

У нас есть несколько проектов, и мы собираемся продвинуть несколько других проектов. Итак, я создал сценарий, который управляет содержимым AWS CI (т.е. создает конвейер, проект CodeBuild, ... И правило событий CloudWatch, связанное с конвейером).

Первый раз, когда я нажимаю свой код, он работает. Но затем процесс перестает вызываться нажатием на CodeCommit.

Я нашел решение (но НЕ то, которое мне нужно): мне просто нужно изменить конвейер, изменить сцену (Source), ничего не трогать и сохранить нулевую модификацию: и это работает (перед сохранением спрашивает авторизация для создания правила CloudWatch Events, связанного с этим конвейером).

Кто-нибудь сталкивался с этой проблемой? Что вы сделали, чтобы обойти это? Я действительно хочу сделать 100% автоматизированный CI, я не хочу посещать Консоль AWS каждый раз, когда моя команда создает новый репозиторий или помещает новую ветку в существующий репозиторий.

РЕДАКТИРОВАТЬ:

Вот JSON моего правила CloudWatch Events:

{
    "Name": "company-ci_codepipeline_project-stage", 
    "EventPattern": "cf. second JSON", 
    "State": "ENABLED", 
    "Arn": "arn:aws:events:region:xxx:rule/company-ci_codepipeline_project-stage", 
    "Description": "CloudWatch Events rule to automatically trigger the needed pipeline from every push to project repository, on the stage branch on CodeCommit."
}

А вот и EventPattern JSON:

{
  "source": [
    "aws.codecommit"
  ],
  "detail-type": [
    "CodeCommit repository state change"
  ],
  "resources": [
    "arn:aws:codecommit:region:xxx:project"
  ],
  "detail": {
    "event": [
      "referenceCreated",
      "referenceUpdated"
    ],
    "referenceType": [
      "branch"
    ],
    "referenceName": [
      "stage"
    ]
  }
}

1 Ответ

0 голосов
/ 19 декабря 2018

Я обнаружил, что эта проблема обычно связана с конфигурацией правила события / цели / роли. Если у вас нет цели, связанной с вашим правилом, вы НЕ увидите событие, вызванное при просмотре метрик. Поскольку ваш EventPattern выглядит правильно, я думаю, что целью может быть ваша проблема.

У вас должна быть настроенная цель, которая выглядит примерно так:

{
    "Rule": "company-ci_codepipeline_project-stage",
    "Targets": [
        {
            "RoleArn": "arn:aws:iam::xxx:role/cwe-codepipeline",
            "Id": "ProjectPipelineTarget",
            "Arn": "arn:aws:codepipeline:region:xxx:your-pipeline"
        }
    ]
}

Если это кажется хорошим, я бы затем проверил, что роль, связанная с целью, предоставляет правильные разрешения. Моя роль выглядит примерно так:

{
    "Role": {
        "Description": "Allows CloudWatch Events to invoke targets and perform actions in built-in targets on your behalf.",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Principal": {
                        "Service": "events.amazonaws.com"
                    },
                    "Effect": "Allow",
                    "Sid": ""
                }
            ]
        },
        "MaxSessionDuration": 3600,
        "RoleId": "xxxx",
        "CreateDate": "2018-08-06T20:56:19Z",
        "RoleName": "cwe-codepipeline",
        "Path": "/",
        "Arn": "arn:aws:iam::xxx:role/cwe-codepipeline"
    }
}

И у него есть встроенная политика:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codepipeline:StartPipelineExecution"
            ],
            "Resource": [
                "arn:aws:codepipeline:*:xxx:*"
            ]
        }
    ]
}

Для справки ознакомьтесь с этой документацией

...