Amazon cloudformation CloudFormation模板:减少样板代码

Amazon cloudformation CloudFormation模板:减少样板代码,amazon-cloudformation,boilerplate,Amazon Cloudformation,Boilerplate,我正在尝试编写CF模板来部署一个由多个lambda组成的无服务器系统。在我的例子中,Lambda资源描述共享很多属性;唯一的区别是文件名和处理函数 如何在模板中定义类似于公共参数集的内容 这个样板太糟糕了: LambdaCreateUser: Type: AWS::Lambda::Function Properties: Code: S3Bucket: Ref: BucketForLambdas S3Key:

我正在尝试编写CF模板来部署一个由多个lambda组成的无服务器系统。在我的例子中,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 }

你要找的是在云结构的顶部有一层语法糖。AWS SAM模板的基本表示形式如下所示:

AWSTemplateFormatVersion:'2010-09-09'
转换:“AWS::Serverless-2016-10-31”
全球:
功能:
运行时:python3.7
环境:
变量:
表:!参考环境表
用户稳定:!Ref用户稳定
资源:
LambdaCreateUser:
类型:AWS::Serverless::Function
特性:
代码:
S3Bucket:
参考:巴克特福兰达斯
S3Key:创建_user.zip
处理程序:创建\u user.lambda\u处理程序
角色:!格塔特·兰博达罗
Lambdadeletueser:
类型:AWS::Serverless::Function
特性:
代码:
S3Bucket:
参考:巴克特福兰达斯
S3Key:delete_user.zip
处理程序:删除\u user.lambda\u处理程序
角色:!格塔特·兰博达罗

但这还不是结局。您可以将代码定义替换为代码的路径,甚至可以替换为内联代码,并使用
sam build
sam package
来构建和上载工件。您还可以将角色定义替换为,以进一步减少样板代码。

谢谢@Dunedan,我们一定会看一看。我的CF模板还部署了两个DynamoDB数据库,S3 bucket,用于Lambda的IAM角色和用于数据库的内联初始化Lambda,希望这一切都可以通过SAM实现(如果它只是CF的语法糖的话)。理想情况下,代码如下所示。比如,DefaultProperties是在其他地方定义的;函数定义中列出的属性将覆盖默认值<代码>LambdaCreateUser:类型:AWS::Serverless::函数属性:!Ref DefaultProperties S3Key:create_user.zip处理程序:create_user.lambda_处理程序LambdaDeleteUser:Type:AWS::Serverless::Function Properties:!Ref DefaultProperties S3Key:delete_user.zip处理程序:delete_user.lambda_处理程序