Как получить параметры SSM из двух разных учетных записей, используя AWS CDK - PullRequest
1 голос
/ 05 мая 2020

У меня есть сценарий, в котором я использую CodePipeline для развертывания моего проекта cdk из учетной записи инструментов в несколько учетных записей среды. Мой конвейер развертывается путем запуска cdk deploy из задания CodeBuild.

Моя команда решила использовать хранилище параметров SSM для хранения конфигурации, и в итоге мы получили некоторые параметры, живущие в учетной записи среды, для например, VPC_ID (resources/vpc/id), который я могу прочитать во время развертывания => ssm.StringParameter.valueForStringParameter.

Однако другие параметры находятся в учетной записи инструментов, например идентификаторы учетных записей из моих учетных записей среды (environment/nonprod/account/id) и другие файлы Global Config. У меня проблемы с получением этих значений.

На данный момент единственный способ, который я мог придумать, - это использовать шаг для чтения всех этих значений на предыдущем шаге и загрузки их в значения контекста.

Есть ли более элегантный подход к этой проблеме? Я надеялся, что смогу указать, из какой учетной записи получать значения SSM. Любые идеи?

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 июня 2020

Как вы уже сказали, для этого нет встроенной поддержки. Я также использую CodePipeline при развертывании нескольких учетных записей, поэтому все параметры автоматизации или параметры продукта хранятся в защищенной учетной записи, а CodePipeline развертывает ресурсы, используя CloudFormation в качестве поставщика действий.

Разрешение параметров SSM между учетными записями не поддерживается, поэтому в конце я добавил дополнительный шаг (стадию) в свой CodePipeline, который представляет собой не что иное, как проект CodeBuild, который запускает скрипт в контейнерная среда и сценарии затем «синхронизируют» параметры из учетной записи автоматизации с целевой учетной записью.

1 голос
/ 05 мая 2020

AFAIK нет собственного способа достичь того, что вы описали. Если есть способ, я тоже хотел бы знать. Я считаю, что для этой цели вы можете использовать пользовательский ресурс CloudFormation, запеченный лямбдой.

Вы можете передавать параметры лямбда-запросу и получать информацию обратно из лямбда-ответа.

См. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html, https://www.2ndwatch.com/blog/a-step-by-step-guide-on-using-aws-lambda-backed-custom-resources-with-amazon-cfts/ и https://docs.aws.amazon.com/cdk/api/latest/docs/custom-resources-readme.html для получения дополнительной информации.

...