AWS::Serverless::Api(複数のステージにデプロイする方法)

AWS::Serverless::Api(複数のステージにデプロイする方法)

API GatewayをCloudFormationでデプロイする際に、api cloudformation packageコマンドを使用します。

SAMテンプレートのStageNameはString型なので複数ステージを指定することはできません。

AWS::ApiGateway::Stage

SAMテンプレートにAWS::ApiGateway::Stageを書くと複数ステージにAPIをデプロイすることが出来ます。

sam.yml

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: Test
Resources:
  RestApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      DefinitionUri: ./swagger.yaml
      OpenApiVersion: 3.0.1
  ProdStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      StageName: prod
      RestApiId: !Ref RestApi
      DeploymentId: !Ref ApiDeploy
  ApiDeploy:
    Type: 'AWS::ApiGateway::Deployment'
    Properties:
      RestApiId: !Ref RestApi

DeploymentIdはステージ作成時に必須なので、AWS::ApiGateway::Deploymentも記述する必要があります。

AWS::Serverless::Apiでdevを作成してデプロイ、AWS::ApiGateway::Stageでprodというステージを作成、AWS::ApiGateway::Deploymentでprodに./swagger.yamlをデプロイしています。

これで、同じAPIをdev,prodにデプロイすることができます。

aws cloudformation package --template-file sam.yml --s3-bucket バケット名 --output-template-file output.yml --profile="default"
aws cloudformation deploy --template-file output.yml --stack-name stackname --profile="default"

但し、以下issueにあるとおり、1スタック1デプロイ環境という構成にするのが良いと思われます。

Mutliple API stages but in a single document - best practice · Issue #198 · aws/serverless-application-model
Hello - I read the Best Practice guidelines for SAM Online Tech Talk which states to create multiple environments in a s...

コメント

タイトルとURLをコピーしました