Назад | Перейти на главную страницу

CodeBuild с настройками VPC не может загрузить исходный код CodeCommit

Изначально у меня была простая установка CodePipeline, запускаемая коммитами в репозиторий CodeCommit, с «Stage», выводящей исходный код в виде артефакта, и другой «Stage», использующей CodeBuild для запуска некоторого кода из этого исходного вывода. Теперь я хочу получить доступ к RDS на этой «стадии» CodeBuild, поэтому я добавил настройки VPC RDS в свой проект CodeBuild.

Проблема в том, что теперь CodeBuild больше не может получить доступ к источнику CodeCommit. Я получаю следующую ошибку:

CLIENT_ERROR: RequestError: send request failed caused by: Get https://mypipeline-artifactstorebucket-twlrq7tj45fq.s3.amazonaws.com/MYPipeline-data-pipe/RepoSource/PKGw3xs: dial tcp 52.216.160.35:443: i/o timeout for primary source and source version arn:aws:s3:::mypipeline-artifactstorebucket-twlrq7tj45fq/MYPipeline-data-pipe/RepoSource/PKGw3xs

Удаляет ли добавление VPC в проект CodeBuild любые настройки по умолчанию? (может быть, изначально использовался VPC по умолчанию?)

Как я могу разрешить CodeBuild доступ к RDS и CodeCommit?

Доступ к CodeBuild на основе VPC зависит от конфигурации подсети, которую вы используете для контейнера CodeBuild.

Если вы помещаете его в Частная подсеть убедитесь, что подсеть настроена для доступа в Интернет через NAT-шлюз.

Если вы запускаете его в Публичная подсеть убедитесь, что он настроен на назначить публичный IP по умолчанию.

Обратитесь к этому ответу для получения дополнительной информации: Публичная и частная подсеть в VPC

А также убедитесь, что нет других ограничений, например Группа безопасности разрешает исходящий доступ в Интернет, нет NACL и т. д.


Простой тест: состоит в том, чтобы развернуть крошечный экземпляр EC2 в той же подсети, где вы запускаете свои контейнеры CodeBuild, и проверить оттуда, может ли он достичь конечной точки сборки кода (например, curl https://mypipeline-artifactstorebucket.../PKGw3xs).

Другими словами: Да, CodeBuild можно запускать в VPC и при этом иметь доступ к CodeCommit, но конфигурация сети вашей подсети должна быть правильной.

Надеюсь, это поможет :)

У меня была такая же проблема, когда я пытался заставить CodeBuild получить код из CodeDeploy, чтобы он мог развернуть код в RDS в VPC. Когда CodeBuild находился за пределами VPC, он мог нормально подключиться к CodeCommit, но как только я поместил CodeDeploy в VPC, сообщение об ошибке было

CLIENT_ERROR: Get https://git-codecommit.ap-southeast-2.amazonaws.com/v1/repos/repo-name/info/refs?service=name: dial tcp 1.2.3.4:443: i/o timeout for primary source and source version refs/heads/master

Мне не удалось найти никакой документации по этому поводу, поэтому я прибегал к методам проб и ошибок, основываясь на том, что написано выше. Я прошел через несколько комбинаций вещей, чтобы понять, что работает, а что нет. Вот что я нашел:

  • CodeBuild должен быть связан с VPC. Я предполагаю, что CodeBuild выделяет ENI (частный IP-адрес, по сути) в VPC.
  • CodeBuild должен быть связан с группой безопасности, которая разрешает выход в диапазон CIDR VPC. Кажется, что правила входа не нужны, что имеет смысл, поскольку в CodeCommi ничего не вызывается.
  • Вам нужна конечная точка интерфейса git-codecommit (com.amazonaws.ap-southeast-2.git-codecommit)
  • Конечная точка git-codecommit должна быть связана с группой безопасности, которая разрешает вход из CodeBuild. Самый простой способ сделать это, вероятно, - просто разрешить вход из диапазона VPC, но вы, вероятно, можете просто сослаться на группу безопасности, которую CodeBuild использует для входа.
  • Не имеет значения, присутствует ли интернет-шлюз / маршрут в Интернет. Сначала я делал это в частной подсети без доступа к Интернету, но затем добавил интернет-шлюз, связал его с VPC, а затем направил подсети на интернет-шлюз (0.0.0.0/0).

Надеюсь, это поможет кому-то еще подключить CodeBuild или CodePipeline к VPC для развертывания в EC2, RDS, ECS или других сервисах.

У меня была такая ошибка, когда я настраивал

    Type: AWS::CodeBuild::Project
    Properties:
        Source: 
            BuildSpec: buildspec-ProdCf.yml
            ....

но на самом деле файл yml находился в подкаталоге.