Небольшое руководство, которое поможет вам закончить быстрее

Bitbucket Pipelines упростила и упростила создание конвейеров CI/CD. Используя Bitbucket, вы можете либо запланировать свои конвейеры, либо выбрать определенные ветки, которые должны запускать конвейеры, как только будут обнаружены какие-либо изменения кода.

Для недавнего проекта мне нужно было запускать конвейер битбакета каждый раз, когда в определенной папке моей корзины AWS S3 появлялся новый файл. Это было проще, чем я думал!

Лямбда-функция Python

Используя лямбда-функцию AWS Python 3.9, мы можем легко отправить запрос POST в API Bitbucket. Для хранения учетных данных пользователя рекомендуется использовать AWS Secrets Manager. Код может выглядеть так:

Здесь функция run_pipeline()отправляет запрос aPOST в API Bitbucket. Каждый раз, когда эта функция Lambda запускается, она отправляет POSTrequest, который автоматически запускает соответствующий конвейер. Если ваш конвейер битбакета работал успешно, вы увидите код состояния 200 в журналах Cloudwatch.

Тем временем функция get_secret() извлекает учетные данные пользователя из AWS Secrets Manager. Если в данный момент вас не волнуют вопросы, связанные с безопасностью, вы также можете жестко закодировать учетные данные во время тестирования.

Уведомление о событии S3

После настройки функции Lambda вам необходимо настроить уведомление о событии в корзине S3. Это гарантирует, что ваша функция Lambda запускается каждый раз, когда в вашей корзине происходит изменение (например, новый файл).

Если вы перейдете на вкладку «Свойства» своего ведра S3, вы можете настроить уведомление о событии для всех событий «создания» объекта (или также событий «удаления», в зависимости от ваших требований). В качестве пункта назначения вы можете выбрать функцию Lambda, которую вы создали на первом шаге.

Если вы хотите, чтобы при запуске функции Lambda учитывались только определенные типы файлов, вы можете указать соответствующие типы файлов в разделе Filters. Вы также можете добавить префикс к настройкам уведомлений о событиях, например, если вы хотите запускать свою лямбду только в том случае, если файлы загружаются в определенную папку в этом сегменте S3.

Разрешения

Чтобы ваша функция Lambda работала без сбоев, вам нужно будет предоставить используемой роли AWS определенные разрешения. Например, используемой роли потребуются политики для доступа к S3, CloudWatch и Secrets Manager.

Скоро я напишу еще одну статью, описывающую, как создать такую ​​же архитектуру с помощью Terraform. Оставайтесь с нами!