Я изучаю некоторые методы DevOps с помощью AWS CodePipeline (Cloudformation и CodeBuild).
Мой (упрощенный) конвейер таков:
На данный момент CloudFormation выводит следующее:
Outputs:
RestApiId:
Value: !Ref ApiGateway
Description: 'API Id'
Вопрос: Как я могу получить идентификатор ApiGateway в CloudBuild?





Вы можете указать шаг CodePipeline следующим образом (из документации):
- Name: CreateTestStackA
Actions:
- Name: CloudFormationCreate
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_IAM
OutputFileName: TestOutput.json
RoleArn: !GetAtt [CFNRole, Arn]
StackName: StackA
TemplateConfiguration: TemplateSource::test-configuration.json
TemplatePath: TemplateSource::teststackA.yaml
InputArtifacts:
- Name: TemplateSourceA
OutputArtifacts:
- Name: StackAOutput
RunOrder: '1'
Итак, в Configuration вам нужно добавить параметр OutputFileName и указать имя выходного артефакта. Затем вы можете использовать этот артефакт в качестве входных данных для CodeBuild. В выходном файле (TestOutput.json) у вас будет словарь, где ключ - это выходное имя, а значение - выходное значение.
Что вы имеете в виду под "всеми файлами"? Действие CloudFormation развертывает только один стек и сохраняет его выходные данные в виде файла JSON. Этот файл может быть входом для другого действия.
Я использую конвейер кода. Следующим шагом после CloudFormation является еще один CodeBuild (может принимать только один входной артефакт).
Мне нужно передать вход CloudFormation, который получил ПЛЮС выход, сгенерированный CloudFormation
Я решил такие проблемы с помощью Invoke action (Lambda). Создайте лямбда-функцию (вот пример: docs.aws.amazon.com/codepipeline/latest/userguide/…) и вызовите ее с двумя входными артефактами. Такая лямбда затем объединит эти артефакты в один и выведет его. Это немного сложно, но лучшего решения я не нашел.
Я уже начал работать над этим решением, надеялся на лучшее решение, поскольку этот вариант использования должен быть обычным. Спасибо!
Есть ли способ включить все файлы в вывод CloudFormations? Это делается в CodeBuild с помощью artifacts: files: - '* /'