😽

AWS API Developer Portal を動かす

2024/07/29に公開

はじめに

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ファイルを出力する方法
  1. API Gateway > 作成した API > ステージ > エクスポートしたいステージ > ボタン[ステージアクション▲] から「エクスポート」を押下
  2. [API仕様タイプ: Swagger + 形式:JSON + 拡張機能:API Gateway 拡張機能あり]でエクスポート
  3. catalog フォルダ内にアップロードする

参考:API Gateway のポータルサイトを簡単に構築できるサーバーレスアプリを試す

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にアクセスできるよう、LambdaAPI GatewayCORS を設定していきます。

  1. 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=["*"],
)

参考:

  1. 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