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...
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント