Как запустить codepipeline с помощью s3 с динамическим ключом объекта s3?

У меня есть ведро, объекты которого имеют commitId в качестве имени. Я хочу передать эти идентификаторы коммитов в свой кодопровод и использовать эти идентификаторы для слабых сообщений.

Я пытаюсь запустить Codepipeline, когда zip-файл загружается на s3, однако, как я вижу в документах, он может запускаться только со статическим ключом ведра. Я хочу запустить с любым именем файла

Https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-S3.html Я имею дело с вариантом использования, когда загруженный объект в s3 будет иметь динамические ключи объекта.

Как справиться с этой ситуацией?

Я прочитал этот вопрос, поэтому я знаю, что использую s3 с лямбдой, а затем запускаю конвейер с лямбдой, но это все равно не сработает, потому что мне нужно передать zip-файл в кодовую сборку.

Попросите Lambda заархивировать объект S3 перед его копированием. Ответ на указанный вопрос советует именно это.

fedonev 11.01.2023 09:57

Это не решает мою проблему, потому что я хочу запускать конвейер кода с разными именами файлов, когда они загружаются в zip. Я не хочу его унифицировать. идея состоит в том, чтобы передать эти имена в codepipeline

Jatin Mehrotra 11.01.2023 10:45
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
0
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TL;DR Попросите Lambda записать идентификатор в commit_id.txt и добавить его в комплект.


Я понимаю, что вы хотите выполнить конвейер, когда произвольный объект, скажем a5bf8c1.zip, добавляется к пути S3, скажем MyPipelineBucket/commits/. У конвейера есть источник S3, скажем MyPipelineBucket/source.zip. Для выполнения вашего конвейера также требуется значение имени файла (a5bf8c1).

  1. Настройте уведомления о событиях S3 в корзине. Примените фильтрацию имени ключа объекта к префиксу MyPipelineBucket/commits/.
  2. Установите лямбда-функцию в качестве пункта назначения
  3. Lambda получает идентификатор фиксации в полезной нагрузке уведомления о событии в качестве имени запускающего файла. Запишите его в файл commit_id.txt. Используя SDK, получите пакет MyPipelineBucket/commits/a5bf8c1.zip от S3. Добавьте commit_id.txt в комплект. Поместите новую связку в MyPipelineBucket/source.zip. Это вызовет выполнение.
  4. В вашем конвейере ваши команды CodeBuild теперь имеют доступ к идентификатору фиксации. Например, вы можете установить идентификатор фиксации в качестве переменной среды:
COMMIT_ID=$(cat commit_id.txt)
echo COMMIT_ID # -> a5bf8c1

У меня вопрос: Когда вы говорите «комплект», что это на самом деле означает. В частности, это утверждение Using the SDK, get the MyPipelineBucket/commits/a5bf8c1.zip bundle from S3. Add commit_id.txt to the bundle. Put the new bundle to MyPipelineBucket/source.zip Означает ли это, что теперь source.zip будет содержать содержимое commit_id.txt + a5bf8c1.zip?

Jatin Mehrotra 12.01.2023 02:31

Пакет кода @JatinMehrotra = ваш «zip» файл = исходный артефакт. Да, выполнение CodePipeline получит один дополнительный файл в исходном артефакте.

fedonev 12.01.2023 08:42

Есть альтернативы. Вместо включения идентификатора в исходный артефакт ваша Lambda может записать CommitID как строковый параметр хранилища параметров диспетчера систем. Тогда ваш конвейер будет GetParameter во время выполнения.

fedonev 12.01.2023 08:43

Что, на ваш взгляд, было бы эффективнее: использование лямбды и связки или лямбда с ssm?

Jatin Mehrotra 12.01.2023 11:10

@JatinMehrotra Преимущество подхода commit_id.txt заключается в меньшем количестве движущихся частей, но я не думаю, что это имеет большое значение, так или иначе.

fedonev 12.01.2023 16:14

Другие вопросы по теме