AWS API Developer Portal を動かす
はじめに
AWS API Gateway Developer Portalをデプロイ後、動作確認の中でつまずいた点をまとめました。
APIの構成図
前提
- AWS API Developer Portal(以下、ポータル)はデプロイ済みであること。
参考:一からAWS API Developer Portalを構築する - API Gateway で APIがデプロイ済みであること。
- API Gateway へのアクセスはAPIキーを利用したい。
swagger ファイルの編集方法
ポータル上で表示するSwaggerファイルは、Developer Portalをsam deploy
するときに指定した ArtifactsS3BucketName="{custom-prefix}-dev-portal-artifacts"
の catalog フォルダ内に配置されます。
「API GatewayからSwaggerファイルを出力」 または 「catalogフォルダのSwaggerファイルを出力」し、catalogフォルダーにアップロードすることでSaggerファイルの更新が可能です。
API GatewayからSwaggerファイルを出力する方法
- API Gateway > 作成した API > ステージ > エクスポートしたいステージ > ボタン[ステージアクション▲] から「エクスポート」を押下
- [API仕様タイプ: Swagger + 形式:JSON + 拡張機能:API Gateway 拡張機能あり]でエクスポート
- catalog フォルダ内にアップロードする
API Gatewayから出力したSwaggerファイルはかなり簡易的で、responsesフィールドなどの中身も無いので肉付けしてアップロードします。
簡易的なSwaggerファイルの例
swagger ファイルへのAPIキーの定義
Swagger 2.0でのAPIキーの定義は、securityDefinitions
を使用します。
OpenAPI仕様では、components
内に記載する要素なので注意しましょう。
"paths": {
//...略...
},
"securityDefinitions": {
"api_key": {
"type": "apiKey",
"name": "x-api-key",
"in": "header"
}
},
CORSを設定する
ポータルからAPI Gatewayにアクセスできるよう、LambdaとAPI GatewayにCORS を設定していきます。
- Lambda
まず下記はLambdaでのCORS設定の例です。言語はPythonでFastAPIを使用しています。
from fastapi.middleware.cors import CORSMiddleware
# ...省略...
# CORS設定
allow_origins = ['http://localhost:8080']
if 'ALLOW_ORIGIN' in os.environ.keys():
allow_origins.append(os.environ['ALLOW_ORIGIN'])
app.add_middleware(
CORSMiddleware,
allow_origins=allow_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
参考:
- API Gateway
ポータルからAPIキーを用いてアクセスする際は、API Gateway のCORS設定も必要です。
設定していないと、ポータル上でTypeError: Failed to fetch
とのエラーが出ます。
API Gateway > 作成した API > リリース > APIキーを使ってアクセスしたいリソース > ボタン[CORSを有効にする] から 設定をします。
動作確認
ポータルへログイン > ボタン[Subscribe] > ボタン[Try it out] > ボタン[Execute] を押下すると、APIを問題なく試すことができました。
Swaggerファイルを複数配置すると、画面左のAPIsの下にどんどんAPIが追記されていきます!
以上、どなたかの参考になれば幸いです。
えみり〜でした|ωΦ)ฅ
Discussion