Шаблон CloudFormation: уменьшить стандартный код - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь составить шаблон CF для развертывания безсерверной системы, состоящей из нескольких лямбд.В моем случае описания ресурсов Lambda имеют много общих свойств;единственное отличие - это имя файла и функция обработчика.

Как я могу определить что-то вроде общего набора параметров в моем шаблоне?

Этот шаблон ужасен:

  LambdaCreateUser:
    Type: AWS::Lambda::Function
    Properties: 
      Code:
        S3Bucket:
          Ref: BucketForLambdas
        S3Key: create_user.zip
      Handler: create_user.lambda_handler
      Runtime: python3.7
      Role: 
        Fn::GetAtt: [ LambdaRole , "Arn" ]
      Environment:
        Variables: { "EnvTable": !Ref EnvironmentTable, "UsersTable": !Ref UsersTable }
  LambdaDeleteUser:
    Type: AWS::Lambda::Function
    Properties: 
      Code:
        S3Bucket:
          Ref: BucketForLambdas
        S3Key: delete_user.zip 
      Handler: delete_user.lambda_handler  
      Runtime: python3.7   
      Role:
        Fn::GetAtt: [ LambdaRole , "Arn" ]
      Environment:
        Variables: { "EnvTable": !Ref EnvironmentTable, "UsersTable": !Ref UsersTable }

1 Ответ

1 голос
/ 28 сентября 2019

То, что вы ищете, это AWS SAM , который является слоем синтаксического сахара поверх CloudFormation.Базовое представление вашего шаблона с AWS SAM будет выглядеть так:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'

Globals:
  Function:
    Runtime: python3.7
    Environment:
      Variables:
        EnvTable: !Ref EnvironmentTable
        UsersTable: !Ref UsersTable

Resources:
  LambdaCreateUser:
    Type: AWS::Serverless::Function
    Properties: 
      Code:
        S3Bucket:
          Ref: BucketForLambdas
        S3Key: create_user.zip
      Handler: create_user.lambda_handler
      Role: !GetAtt LambdaRole.Arn
  LambdaDeleteUser:
    Type: AWS::Serverless::Function
    Properties: 
      Code:
        S3Bucket:
          Ref: BucketForLambdas
        S3Key: delete_user.zip 
      Handler: delete_user.lambda_handler  
      Role: !GetAtt LambdaRole.Arn

Но это не конец.Вы можете заменить определение кода на путь к вашему коду или даже встроенному коду и использовать sam build и sam package для создания и загрузки ваших артефактов.Возможно, вы также можете заменить определение роли на шаблоны политики SAM для дальнейшего сокращения стандартного кода.

...