Как извлечь общие строки в шаблоне AWS CloudFormation? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть шаблон, и я заметил, что есть много дублирующих строк.

GetStatusLambda:
Type: AWS::Lambda::Function
Properties:
  Code:
    S3Bucket: test-deployments
    S3Key:
      Fn::Join: [ "/", [
        test-lambdas,
        Ref: FileNameParameter
      ]]
  Handler: 'test.lambdasEntryPoint::getStatus'
  Runtime: java8
  MemorySize : 512
  Role:
    Fn::GetAtt: [LambdaRole, Arn]
  Description: Lambda attached to get status API
  Timeout: 30

SubmitInformationLambda:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        S3Bucket: test-deployments
        S3Key:
          Fn::Join: [ "/", [
            test-lambdas,
            Ref: FileNameParameter
          ]]
      Handler: 'test.lambdasEntryPoint::submitInformation'
      Runtime: java8
      MemorySize: 512
      Role:
        Fn::GetAtt: [LambdaRole, Arn]
      Description: Lambda attached to Submit Information API
      Timeout: 30

Есть ли способ извлечь разделы дублирования, такие как Code, Runtime, MemorySize, Timeout, и использовать Fn: Subot Fn: GetAtt, чтобы позвонить им?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Нельзя дублировать или ссылаться на блоки, но вы можете использовать секцию Parameters для определения переменных, а затем использовать их в секции Resources.Тем не менее, будьте осторожны, стараясь излишне из-за этого, так как это может затруднить чтение и обслуживание ваших шаблонов CloudFormation.

Parameters:
  MemorySizeParameter:
    Type: String
    Default: 512
    Description: Memory size in MB

Используйте следующую строку в разделе ресурсов:

MemorySize:
   Ref: MemorySizeParameter
0 голосов
/ 10 октября 2018
  GetStatusLambda:
    Type: AWS::Lambda::Function
    Properties:
      Handler: 'test.lambdasEntryPoint::getStatus'
      Role:
        Fn::GetAtt: [LambdaRole, Arn]
      Description: Lambda attached to get status API
      Fn::Transform:
        Name: "AWS::Include"
        Parameters:
          Location: "s3://somebucket/include-partials/lambda-partials.yaml"
  SubmitInformationLambda:
    Type: AWS::Lambda::Function
    Properties:
      Handler: 'test.lambdasEntryPoint::submitInformation'
      Role:
        Fn::GetAtt: [LambdaRole, Arn]
      Description: Lambda attached to Submit Information API
      Fn::Transform:
        Name: "AWS::Include"
        Parameters:
          Location: "s3://somebucket/include-partials/lambda-partials.yaml"

Файл lambda-partials.yaml будет содержать:

Code:
  S3Bucket: test-deployments
  S3Key:
    Fn::Join: [ "/", [
      test-lambdas,
      Ref: FileNameParameter
    ]]
Runtime: java8
MemorySize : 512
Timeout: 30
0 голосов
/ 02 октября 2018

Многословие шаблонов CloudFormation хорошо известно и немного грустно, но в значительной степени неизбежно.К сожалению, единственным способом уменьшить дублирование является использование вложенных стеков или некоторая форма предварительной обработки.Вы можете выполнить предварительную обработку либо локально, используя IDE или конвейер сборки, либо после загрузки шаблона в AWS с помощью Настраиваемые преобразования .

По крайней мере, шаблоны CloudFormation теперь могут быть написаны на YAMl;до сентября 2016 они должны были быть написаны в формате JSON, что делало их даже более подробными ...

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