はじめに
Serverless Framework v3を使用してAWS API Gatewayを管理している際に、不要になったメソッドを削除しようとしたものの、正常に削除できないという問題が発生することがあります。本記事では、この問題の原因と解決策について解説し、具体的なCLIコマンドを用いた削除方法を紹介します。
問題の概要
Serverless Framework v3を使用してAPI Gatewayのリソースやメソッドを定義し、デプロイを行った後に、serverless.yml から特定のメソッドを削除して再デプロイしても、API Gatewayのステージ内のメソッドが削除されずに残り続けることがあります。
この問題の主な原因として、Serverless FrameworkがAPI Gatewayのリソース変更を適切に反映しない場合があることが挙げられます。Serverless FrameworkはCloudFormationを使用してAPI Gatewayをデプロイしますが、CloudFormationの管理外になったリソース(既にデプロイされたが、Serverless Frameworkの定義から削除されたリソース)が自動で削除されないケースがあります。
解決策
1. API Gatewayのリソースを手動で削除
Serverless Frameworkでは削除が行われない場合、AWS CLIを使用して不要なメソッドを手動で削除することが可能です。
1.1 メソッドの削除
API Gatewayの不要なメソッドを削除するには、以下のAWS CLIコマンドを使用します。
aws apigateway delete-method \
--rest-api-id <API_ID> \
--resource-id <RESOURCE_ID> \
--http-method <HTTP_METHOD>
パラメータの説明:
-
<API_ID>
: API GatewayのID(aws apigateway get-rest-apis
で取得可能) -
<RESOURCE_ID>
: 削除したいメソッドが含まれるリソースのID(aws apigateway get-resources --rest-api-id <API_ID>
で取得可能) -
<HTTP_METHOD>
: 削除対象のメソッド(例:GET
,POST
,PUT
,DELETE
など)
2. API Gatewayのデプロイをリセット
メソッドを削除した後、API Gatewayのステージに変更を適用するためにデプロイをリセットする必要があります。
aws apigateway create-deployment \
--rest-api-id <API_ID> \
--stage-name <STAGE_NAME>
パラメータの説明:
-
<API_ID>
: API GatewayのID -
<STAGE_NAME>
: 対象のステージ名(例:dev
,prod
など)
3. Serverless FrameworkでAPI Gatewayをクリーンアップ
Serverless Frameworkが不要なメソッドを削除しない場合、デプロイ前にAPI Gatewayのキャッシュをクリアするのも一つの方法です。
3.1 CloudFormationスタックの削除と再デプロイ
Serverless Frameworkが作成したCloudFormationスタックを一度削除し、API Gatewayを再デプロイすることで、不要なメソッドを完全に削除できます。
serverless remove
serverless deploy
この方法はAPI Gatewayのすべてのリソースを再構築するため、一部の設定が失われる可能性がある点に注意が必要です。
まとめ
Serverless Framework v3でAPI Gatewayのステージ内のメソッドが削除できない問題の主な原因は、CloudFormationがリソースの削除を適切に管理しないことにあります。本記事では、以下の解決策を紹介しました。
- AWS CLIを使用して不要なメソッドを削除
- API Gatewayのデプロイをリセット
- Serverless FrameworkのCloudFormationスタックを削除して再デプロイ
これらの方法を活用することで、API Gatewayの不要なメソッドを確実に削除し、適切な状態を維持することが可能になります。