AWS API Gateway と Azure API Management を比較する
API基盤をAWS API Management と Azure API Managementのどちらにするか、比較検討を行った際に気になった点をまとめています。
前提
- APIタイプはRESTとし、OpenAPIスキーマを使用してAPIを定義したい
- APIのドキュメントは外部に公開したい
- 認証・認可機能も追加したい
比較1:OpenAPI定義の書き方
バックエンドとの統合を行う際、AWS API GatewayとAzure API ManagementとでOpenAPIスキーマの書き方に違いがあります。
AWS API Gateway:
- OpenAPIの定義をAPIGatewayでインポートして使う際には、APIGateway独自の拡張定義をOpenAPI定義に追加する必要がある。
- 例えばLambda統合のAPIを作成したい場合、下記のように
x-amazon-apigateway-integration
の設定値を追記する。
- 例えばLambda統合のAPIを作成したい場合、下記のように
x-amazon-apigateway-integration:
httpMethod: "POST"
uri: "arn:aws:apigateway:ap-northeast-1:lambda:path/2015-03-31/functions/<Function Arn>/invocations"
passthroughBehavior: "when_no_match"
type: "aws_proxy"
credentials : "<IAM Role Arn>"
- 直接OpenAPI定義に追加するのは面倒&イケてない。。と感じる方は、APIGatewayなどAWSのリソースはIaCで管理するのが良い。OpenAPI定義はピュアなままで維持し、Lambda統合などの設定をCDK側のコードで制御するようにする。
参考:OpenAPI × AWS CDK × APIGateway でRest APIを管理する
補足:マネジメントコンソールからOpenAPIをエクスポートする方法
AWS API Gatewayを作成後、OpenAPIスキーマをエクスポートすることもできます。
- マネジメントコンソールから、API Gateway > API > <API名> > ステージ へアクセスします。
ボタン[ステージアクション▲]からエクスポートを選択。
- API をエクスポートするタイプを選択します。
今回は、拡張機能なしでエクスポートしてみます。
- 下記のようなスキーマが生成されます。
Azure API Management:
- OpenAPI定義はピュアなままで維持できる。AWSのように『独自の拡張定義』を記載する必要はない。
参考:[初学者向け]Azure API Management + Functions(TypeScript)でAPIを公開してみよう
比較2:開発者ポータル
開発者ポータルとは、API のドキュメントが含まれる Web サイトです。 API コンシューマーはここで API を見つけ、使用方法を確認し、アクセスを要求し、試すことができます。
特徴 | AWS API Gateway | Azure API Management |
---|---|---|
開発者ポータル | サードパーティツールが必要 | ビルトインの開発者ポータルあり |
AWS API Gateway:
- AWSが提供するリファレンス実装を利用することで、独自の開発者ポータルを構築することが可能。
- セットアップの方法3種
- SAR(Serverless Application Repository) / SAM(Serverless Application Model) / development scripts を使用する
- ポータルサイト用のサービスがIaCでデプロイされる
- CloudFront / API Gateway / Lambda / Cognito / DynamoDB / S3等。
- ポータルサイトの公開URLはCloudFrontのURL(例:
https://d111111abcdef8.cloudfront.net
)
- ドキュメントイメージ(カスタマイズ可能)
AWS API Gateway Developer Portal
参考:
Azure API Management:
- ビルトインの開発者ポータルが備わっており、自動的に生成される。
- ポータルサイトの公開URLは通常、API Managementインスタンスのドメイン名に基づいて生成される(例:
https://<your-apim-instance-name>.developer.azure-api.net
)
- ポータルサイトの公開URLは通常、API Managementインスタンスのドメイン名に基づいて生成される(例:
- ドキュメントイメージ(カスタマイズ可能)
Azure API Management の解説とハンズオンの復習
-
Azure API Centerという企業内のAPIをまとめてカタログ化できるサービスもある
- 1つのAPI Managementに対して1つの開発者ポータルが存在する(1 to 1)のに対して、API Centerは複数のAPIソリューションを1つにまとめる(many to 1)ことができる。
比較3:構成図
両環境を類似サービスで構築する際のイメージ図になります。
AWS API Gateway:
Azure API Management:
比較4:使用料
両環境の構成図を比較してみるとAzureの方が利用サービスが少なく見えますが、両環境の利用料を見積もると全体でAzureの方がAWSに比べ3.5倍ほどの金額になりました。
例えばAPI Managementで「Entra ID」との統合を行おうとすると、従量課金プランは使用できず最低でも開発者プランからの利用になり、立ち上げているだけでお金がかかりますので1か月あたりのコストは48.03USD
になります。
Azure API Management レベルの機能に基づく比較
それに対し、API Gatewayの場合は従量課金で対応が可能のため、リクエスト数100回/1日ほどで見積もった料金は0.01USD
になりました。
他にもAWS LambdaとAzure Functionsをコンテナ形式でデプロイしようとすると、Azureの場合は従量課金プランが利用できずPremiumプランに変更が必要になるなど、AWSでは従量課金で利用できるサービスがAzureでは上位のプランに変更の必要がある場合があります。
下記のいばらきさんの記事にもありますが、Azureはサーバレスで使うよりもコンテナを利用した方が良いように思いました。是非ご覧ください。
さいごに
AWS API ManagementとAzure API Managementの違いで気になった点をまとめてきました。随時追記していきたいと思います。
以上、えみり〜でした|ωΦ)ฅ
参考
AWS
- AWS CDKでCognitoを使ったREST APIを作ってみる
- CDKのAPIGateway+Lambda構成をOpenAPIの定義から作成する
- オープンAPIの定義からAmazon API Gatewayを構築する
- OpenAPIでコードを生成してスキーマ駆動で開発する:GoとTypeScriptの場合
- AWS API Gatewayのdocumentation partを利用してAPIの仕様書をいい感じにする
- Swagger による API Gateway の定義
- 【AWS CDK (Python)】 LambdaのCI/CD環境をIaCで作る
Discussion