Создать ресурс облачной информации, умноженный в разы - PullRequest
0 голосов
/ 11 июля 2019

Я только что перешел к формированию облака, и я начинаю с создания репозиториев ECR для докера, Мне нужно, чтобы все репозитории имели одинаковые свойства, кроме имени репозитория.

Поскольку это микро-сервисы, мне понадобится как минимум 40 репо, поэтому я хочу создать стек, который будет создавать репо для меня в цикле, и просто изменить имя.

Я начал смотреть на вложенные стеки, и вот что я получил до сих пор:

ECR-root.yaml:

---
AWSTemplateFormatVersion: '2010-09-09'
Description: ECR docekr repository
Parameters:
  ECRRepositoryName:
    Description: ECR repository name
    Type:  AWS::ECR::Repository::RepositoryName
Resources:
  ECRStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: https://cloudformation.s3.amazonaws.com/ecr-stack.yaml
      TimeoutInMinutes: '20'
      Parameters:
        ECRRepositoryName: !GetAtt 'ECRStack.Outputs.ECRRepositoryName'

И ecr-stack.yaml:

---
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  ECRRepositoryName:
    Description: ECR repository name
    Default: panpwr-mysql-base
    Type: String

Resources:
    MyRepository:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: 
        ref: ECRRepositoryName
      RepositoryPolicyText:
        Version: "2012-10-17"
        Statement:
          -
            Sid: AllowPushPull
            Effect: Allow
            Principal:
              AWS:
                - "arn:aws:iam::123456789012:user/Bob"
                - "arn:aws:iam::123456789012:user/Alice"
            Action:
              - "ecr:GetDownloadUrlForLayer"
              - "ecr:BatchGetImage"
              - "ecr:BatchCheckLayerAvailability"
              - "ecr:PutImage"
              - "ecr:InitiateLayerUpload"
              - "ecr:UploadLayerPart"
              - "ecr:CompleteLayerUpload"

RepositoryNameExport:
    Description: RepositoryName for export
    Value:
      Ref: ECRRepositoryName
    Export:
      Name:
        Fn::Sub: "ECRRepositoryName"

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

Как мне получить все это в одном стеке, которое создает столько репозиториев, сколько я хочу?

1 Ответ

1 голос
/ 13 июля 2019

Звучит так, как будто вы хотите пройтись по заданному списку параметров. Цикл невозможен в шаблоне CloudFormation. Несколько вещей, которые вы можете попробовать

  1. Вы можете программно создать шаблон. Библиотека troposphere Python предоставляет удобную абстракцию для создания шаблонов.

  2. Запись собственного ресурса, поддерживаемого AWS lambda . Вы можете обрабатывать свою собственную логику в лямбда-функции AWS.

  3. AWS Cloud Development Kit (AWS CDK) - это среда разработки программного обеспечения с открытым исходным кодом, позволяющая определять облачную инфраструктуру в коде и предоставлять ее через AWS CloudFormation. Используйте AWS CDK , чтобы написать собственный сценарий для вашего сценария использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...