是否可以在SAM文件中声明无服务器应用程序所需的AWS资源(例如sam-common.yaml),然后将其包含在其他SAM文件中,例如(sam-dev.yaml,sam-prod.yaml等) )。
sam-common.yaml文件如下所示:
Resources:
Function1:
Type: 'AWS::Serverless::Function'
Properties:
FunctionName: !Ref EnvironmentSpecificLambdaName
.
.
.
Environment:
Variables:
S3_BUCKET_NAME: !Sub 'some-bucket-${EnvName}'
.
.
.
Tags:
Environment: !Ref TagEnvironment
SQSQueue1:
Type: AWS::SQS::Queue
Properties:
QueueName: !Sub 'some-sqs-queue-${EnvName}'
VisibilityTimeout: 200
sam-dev.yaml文件如下:
AWSTemplateFormatVersion: '2010-09-09'
Transform: ....
Description: ...
Parameters:
TagEnvironment:
Type: String
Default: 'DEV'
EnvironmentSpecificLambdaName:
Type: String
Default: 'some-lambda-dev'
EnvName:
Type: String
Default: 'dev'
目标是将 sam-common.yaml 像部分内容一样包含在 sam-dev.yaml 中(类似于 thymeleaf 的模板引擎em>和 ejs 做)。这样可以避免在不同的环境特定文件中复制所有资源。
有一些方法可以将yaml文件包含到另一个文件中,如此处How can I include a YAML file inside another?所述。但是我不确定处理这些文件的AWS后端是否使用这些解决方案中的任何一种。