AWS::ApiGateway::Stage と AWS::ApiGateway::Deployment の違い
CloudFormationでAPI Gatewayを作成する際の AWS::ApiGateway::Stage
と AWS::ApiGateway::Deployment
の役割分担というか違いがよくわからないまま、適当なサンプルを使いまわして雰囲気で使っていたのですが、やっとわかってきたので、メモです。
AWS::ApiGateway::Stage
- ステージを表す。ステージはAPI Gatewayに複数ありえる。典型的には本番環境と検証環境の2つ
- ステージだけが存在してデプロイがないとAPIは機能しない
DeploymentId
プロパティでAWS::ApiGateway::Deployment
を参照することでデプロイとステージが紐づく- AWS::ApiGateway::Stage - AWS CloudFormation
- AWS::ApiGateway::Deployment
- ステージへのデプロイを表す
- ステージがないとステージだけでは意味がない
AWS::ApiGateway::Stage
のDeploymentId
プロパティがAWS::ApiGateway::Deployment
を参照することでデプロイとステージが紐づくAWS::ApiGateway::Stage
がなくてもAWS::ApiGateway::Deployment
にStageName
プロパティがあればその名前のステージが作成される(これが理解を妨げる混乱の元だった)- AWS::ApiGateway::Deployment - AWS CloudFormation
API Gatewayのステージングの機能を使わずに本番用ステージひとつだけのCloudFormationは次のようになります。
AWSTemplateFormatVersion: '2010-09-09' Resources: SampleApiGateway: Type: AWS::ApiGateway::RestApi ... SampleApiGatewayProdStage: Type: AWS::ApiGateway::Stage Properties: DeploymentId: !Ref SampleApiGatewayDeployment RestApiId: !Ref SampleApiGateway StageName: Prod SampleApiGatewayDeployment: Type: AWS::ApiGateway::Deployment Properties: RestApiId: !Ref SampleApiGateway
または AWS::ApiGateway::Stage
を省略すると次のようになります。 StageName
が AWS::ApiGateway::Deployment
に必須になります。
AWSTemplateFormatVersion: '2010-09-09' Resources: SampleApiGateway: Type: AWS::ApiGateway::RestApi ... SampleApiGatewayDeployment: Type: AWS::ApiGateway::Deployment Properties: RestApiId: !Ref SampleApiGateway StageName: Prod