Можно ли объявить AWS ресурсы, необходимые для безсерверного приложения, в файле SAM (скажем, sam-common.yaml), а затем включить его в другие файлы SAM, такие как (sam-dev.yaml, sam-prod.yaml) , et c.).
Файл 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 и е js до). Это позволит избежать дублирования всех ресурсов в разных файлах среды, указанных c.
Существуют способы включения файла yaml в другой, как описано здесь Как включить файл YAML в другой файл? . Но я не уверен, использует ли бэкэнд AWS, который обрабатывает эти файлы, какое-либо из этих решений.