AWS SAMで「Stage」ステージが作られるバグを回避する

AWS::Serverless::ApiのOpenApiVersionを指定すればOK

Takashi Iwamoto
Jan 16 · 4 min read

先日、AWS SAMチュートリアルを進めていて、アプリケーションをデプロイした際、API Gatewayに2つのステージ(「Prod」と「Stage」)が作られ、不思議に思いました。必要なのは「Prod」だけです。調べると、これはSAMのバグで、すでに回避策が提供されていることが分かりました。本記事では、その回避策をご紹介します。

回避策:AWS::Serverless::ApiのOpenApiVersionを指定する

その回避策とは「SAMテンプレートのAWS::Serverless::Apiリソースに対するOpenApiVersionの指定」です。GitHubのissue正式な回避策として紹介されています

OpenApiVersionに指定できる値は下記の通りです。

This can either be 2.0 for the Swagger specification, or one of the OpenApi 3.0 versions, like 3.0.1. For more information about OpenAPI, see the OpenAPI Specification.

実際の指定先として手っ取り早いのはGlobalsセクションです。下記のように指定するだけで、不要な「Stage」ステージが作られなくなります。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 3
Api:
OpenApiVersion: 3.0.2
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.7
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get

もしくは下記のように、AWS::Serverless::FunctionリソースのEventSource側で指定しても、不要な「Stage」ステージが作られなくなります。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.7
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
RestApiId:
Ref: HelloWorldApiGatewayApi
HelloWorldApiGatewayApi:
Properties:
StageName: Prod
OpenApiVersion: 3.0.2
Type: AWS::Serverless::Api

回避策が使えるAWS SAM CLIのバージョン

この回避策はAWS SAM CLI 0.22.0以降であれば使えるはずです。aws-sam-translator 1.13.0で回避策が追加され、AWS SAM CLI 0.22.0で依存しているaws-sam-translatorのバージョンが上がりました

まとめ

AWS SAMで余分な「Stage」ステージが作られるバグについて、回避策をご紹介しました。余分なステージを作ってもメリットはないので、忘れずに回避しましょう。

VELTRA Engineering

Posts from the VELTRA Engineering team. www.veltra.com

Takashi Iwamoto

Written by

Web developer at VELTRA corporation / Japan Mensa member

VELTRA Engineering

Posts from the VELTRA Engineering team. www.veltra.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade