AWS::Serverless::Api(APIのIDを変更せずに再デプロイする方法)

AWS::Serverless::Api(APIのIDを変更せずに再デプロイする方法)

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

その際、APIのIDを変更せずに再デプロイする方法です。

DefinitionUriでローカルのyaml(swagger)を指定します。

sam.yml

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: Test
Resources:
  HelloWorldApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      DefinitionUri: ./swagger.yaml

aws cloudformation packgeコマンドを実行します。

aws cloudformation package --template-file sam.yml --s3-bucket バケット名 --output-template-file out.yml

これでuuidのようなファイル名のファイルがアップロードされます。中身はswagger.yamlです。

AWS::Serverless::Api(APIのIDを変更せずに再デプロイする方法)

コマンドを実行した場所にout.ymlが作成されるので、このテンプレートファイルからaws cloudformation deployコマンドを実行します。

aws cloudformation deploy --template-file ./out.yml --stack-name stackname

これでstacknameというスタックが作成されます。これでAPI Gatewayのデプロイが完了です。

packageしてからdeployすることで、再度デプロイしてもapiのidが変更されることはありません。

エンドポイントはデフォルトはEdge

エンドポイントを指定しない場合はEdgeとなります。指定する場合は以下があります。

エンドポイントタイプ
EDGE
PRIVATE
REGIONAL

指定方法は以下の通りです。

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: Test
Resources:
  HelloWorldApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      DefinitionUri: ./swagger.yaml
      EndpointConfiguration: REGIONAL
      OpenApiVersion: 3.0.1

API IDが変更されるケース

Resourcesで指定しているHelloWorldApi(論理ID)をスタック作成後に一旦変更してしまったりすると新しいAPI Gatewayが出来てしまうので、その場合はAPI IDが変更されてしまいます。

コメント

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