Как установить полуслучайное имя для корзины S3, используя формирование облака - PullRequest
0 голосов
/ 27 февраля 2019

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

Что я могу сделать, чтобы имя содержало читабельную часть в дополнение к случайному уникальному идентификатору?Что-то вроде: MyBucket-abcdabcd, MyBucket-efghefgh, MyBucket-ijklijkl.

"S3Bucket" : {
  "Type" : "AWS::S3::Bucket",
  "Properties" : {
    "BucketName": "MyBucket",
    "PublicAccessBlockConfiguration" : {
      "BlockPublicAcls" : true,
      "BlockPublicPolicy" : true
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Спасибо Спящий Смит .Это отличный ответ, и я некоторое время искал решение этой проблемы!


tl; dr

yaml CloudFormation ниже возвращает "bucket-with-half-random-name-name-51af3dc0 "

BucketWithSemiRandomName:
  Type: "AWS::S3::Bucket"
  Properties:
    BucketName: !Join
      - "-"
      - - "bucket-with-semi-random-name"
        - !Select
          - 0
          - !Split
            - "-"
            - !Select
              - 2
              - !Split
                - "/"
                - !Ref "AWS::StackId"

Небольшая ошибка индекса в образце кода при условии Sleeper Smith .Вам нужно будет заменить индекс выбора, как показано ниже.

Использование того же примера ARC стека в качестве исходного ответа ...

arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
!Select [2, !Split [/, !Ref AWS::StackId ]]

Приведенный выше пример кода возвращает UUID (индекс 2)из стека ARN "51af3dc0-da77-11e4-872e-1234567db123"

!Select [0, !Split[-, !Select [2, !Split [/, !Ref AWS::StackId ]]]]

Приведенный выше пример кода возвращает первый сегмент (индекс 0) UUID из стека ARN "51af3dc0"


Это итоговый yaml, который я сейчас использую, основываясь на ответе Sleeper Smith .Я объединил a! Join, чтобы предоставить больше контекста имени сегмента.

BucketWithSemiRandomName:
  Type: "AWS::S3::Bucket"
  Properties:
    BucketName: !Join
      - "-"
      - - "bucket-with-semi-random-name"
        - !Select
          - 0
          - !Split
            - "-"
            - !Select
              - 2
              - !Split
                - "/"
                - !Ref "AWS::StackId"

Приведенный выше пример кода возвращает "bucket-with-semi-random-name-name-51af3dc0"

0 голосов
/ 28 мая 2019

У вас есть два варианта.

Первый вариант - вы можете просто оставить свойство BucketName пустым.Когда вы оставите это поле пустым, вы получите имя: --

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

Второй вариант - использовать суффикс ARN стека, который являетсяслучайный гид: arn: aws: cloudformation: us-west-2: 123456789012: стек / тестовый стек / 51af3dc0-da77-11e4-872e-1234567db123

!Select [1, !Split [/, !Ref AWS::StackId ]]

Это даст вам 51af3dc0-da77-11e4-872e-1234567db123 'Вы можете еще больше разделить это и выбрать часть, если хотите.

!Select [1, !Split[-, !Select [1, !Split [/, !Ref AWS::StackId ]]]]

Дает вам 51af3dc0

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