API Gateway の HTTP API が 5 つの AWS サービスとの統合をサポート

記事タイトルとURLをコピーする

はじめに

こんにちは、技術1課の山中です。 今回は Amazon API Gateway に関するアップデートです!

API Gateway HTTP API が 5 つの AWS のサービスとの統合を追加

HTTP API とは

HTTP API は AWS re:Invent 2019 でベータ版が発表され、今年の 3 月に GA となった Amazon API Gateway (以下、 API Gateway) の新機能です。
もともと API Gateway は、 REST API と WebSocket API をサポートしていました。
HTTP API を使用すると、 REST API よりも低レイテンシーおよび低コストで、 RESTful API を作成することができます。
ただし、旧世代の REST API の方が多くの機能を有しているため、単純に HTTP API を選択すれば良い、ということではありません。
HTTP API と REST API の機能の違いは、以下公式ドキュメントをご覧ください。

HTTP API と REST API 間で選択する - Amazon API Gateway

今回のアップデート

これまでは、 HTTP API では AWS Lambda 関数と任意の HTTP バックエンドにリクエストをルーティングすることができましたが、 AWS サービス統合はサポートされていませんでした。
よって、バックエンドとして他の AWS サービスを利用したい場合は、 AWS Lambda 関数もしくは HTTP バックエンド経由でアクセスすることが必要でした。

f:id:swx-yamanaka:20200828075705p:plain

今回新たに以下 5 つの AWS サービスとの統合が追加されました。

  • AWS AppConfig
  • Amazon EventBridge
  • Amazon Kinesis Data Streams
  • Amazon SQS
  • AWS Step Functions

サポートするアクションについては、 公式ドキュメント を参照ください。
今回のアップデートで、 API 経由で直接 AppConfig から設定情報を取得したり、 EventBridge にイベントを発行したり、 Kinesis Data Streams を介してデータを取り込んだり、 SQS にメッセージを送信したり、 Step Functions でワークフローを開始したりすることができるようになりました。

f:id:swx-yamanaka:20200828075755p:plain

試してみる

では実際に試してみましょう。
今回は AWS AppConfig との統合を確認してみます。
AppConfig と統合することで、設定情報を HTTP API から取得することが可能です。

事前準備

今回のアップデート内容を試すために、以下を事前に作成しておきます。

  • AppConfig
  • IAM ロール

AppConfig には YouTube API を利用する際の設定情報 (対象プレイリストの ID) を格納しています。
IAM ロールは HTTP API を作成する際に、 Invocation role で指定します。
今回は、 AppConfig の GetConfiguration を許可するように以下ポリシーにて事前に作成しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "appconfig:GetConfiguration",
            "Resource": "*"
        }
    ]
}

HTTP API の作成

AWS マネジメントコンソールから API Gateway を開き、 API を作成 ボタンをクリックします。

f:id:swx-yamanaka:20200828090008p:plain

API タイプは HTTP API を選択しましょう。

f:id:swx-yamanaka:20200828090115p:plain

API 名に任意の名前を入力。

f:id:swx-yamanaka:20200828090218p:plain

そのまま進めていきます。

f:id:swx-yamanaka:20200828090241p:plain

ステージもデフォルト、自動デプロイも有効のまま進めていきます。

f:id:swx-yamanaka:20200828090257p:plain

作成ボタンをクリックして作成しましょう。

f:id:swx-yamanaka:20200828090352p:plain

HTTP API ができたので、左ペインから ルート を選びます。

f:id:swx-yamanaka:20200828090503p:plain

ルートの作成画面で、 Create ボタンをクリック。

f:id:swx-yamanaka:20200828090522p:plain

今回は GET メソッドを選択し /appconfig パスを入力しました。

f:id:swx-yamanaka:20200828090638p:plain

ルートが作成されたので、 統合をアタッチする ボタンをクリックしてバックエンドリソースを定義していきましょう。

f:id:swx-yamanaka:20200828090658p:plain

統合を作成してアタッチ ボタンをクリック。

f:id:swx-yamanaka:20200828090748p:plain

統合ターゲットに今回追加された各 AWS サービスが存在することがわかります。 今回は AWS AppConfig を選択します。

f:id:swx-yamanaka:20200828090822p:plain

AWS AppConfig との統合では現在 1 つのアクションのみをサポートしているので、 GetConfiguration を選択しましょう。

f:id:swx-yamanaka:20200828090917p:plain

GetConfiguration を指定したので、 設定情報の取得に必要なパラメータ をリクエストからマッピングする設定を行います。 今回はデモなので設定や Client ID を直接指定していますが、 $request.body.Configuration$request.body.ClientId と定義することでリクエスト時に柔軟にパラメータを指定することも可能です。

f:id:swx-yamanaka:20200828091439p:plain

これで HTTP API の作成は完了です。

f:id:swx-yamanaka:20200828091919p:plain

API を叩いてみる

実際に作成した HTTP API を実行してみましょう。 指定したパスに対して GET リクエストを送信してみます。

$ curl -X GET https://9f2rhk00cd.execute-api.ap-northeast-1.amazonaws.com/appconfig
- PLCRz5JqTKzfn5rWKSfEAceiJWeHAxHThd #30分でわかる AWS UPDATE! - サービスカット版 -
- PLCRz5JqTKzfkU-mN5u13OC6OzuXrhhqc2 #30分でわかる AWS UPDATE!
- PLCRz5JqTKzfkEmHYlklTY7vHY0vbXMQSE #はじめてのAWS
- PLCRz5JqTKzfkAOEjtq2eniDfTCpl4-go3 #初級ハンズオン
- PLCRz5JqTKzfmHYSSSQhs2Y-qPFU201s3p #毎日AWS

きちんと AppConfig に定義してある設定情報を取得することができました!!

おわりに

API Gateway から他の AWS サービスを利用する際、これまでは AWS Lambda を経由したアクセスが主流でしたが、このように直接他のサービスとの統合が簡単に低コストでできてしまうならこちらを使ったほうがよさそうですね。
ただしまだまだサポートしているサービスおよびアクションも限られているので、今後のアップデートに期待しましょう!
この内容は 2020/9/2(水) 18:00 よりYouTube にて配信する「30分でわかる AWS UPDATE!」で取り上げますので、是非ご覧ください!
チャンネル登録よろしくおねがいします!!

www.youtube.com

また、以下でも今回のアップデートに触れておりますので、あわせてご覧ください。


【毎日AWS #045】AWSのREST APIサービス次の標準へ... API Gateway HTTP API が 5つのAWSサービスとの統合を追加 他10件

参考

山中 大志(記事一覧)

アプリケーションサービス部

ビールと味噌カツをこよなく愛するエンジニアです。

AWSをみなさんにより使っていただけるような情報を発信していきたいと考えてます。