Help us understand the problem. What is going on with this article?

【API Gateway】HTTP API 使ってみた

AWSのAPI Gatewayで、HTTP API(ベータ版)が利用出来るようになったので、使ってみました。
※正式リリース版ではなくベータ版であることに、ご注意ください。

HTTP APIとは

AWSの公式ドキュメントには下記のようなことが書かれています。

HTTP API を使用すると、REST API よりも低いレイテンシーとコストで RESTful API を作成することができます。

HTTP API を使用して、AWS Lambda 関数またはルーティング可能な HTTP エンドポイントにリクエストを送信できます。

APIを低レイテンシー、低コストで利用できるようになるのは、とてもありがたいことですね。

HTTP APIの作成

AWSマネージメントコンソールから作成していきます。
[APIを作成]をクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313035392f34376138353530372d633863332d346330392d343863652d6334653864376663346166392e706e67.png

作成するAPIの種類の選択画面が表示されます。
HTTP APIの[構築]をクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313035392f37633335643464662d303836352d353430652d656564392d6236346631323437373334372e706e67.png

APIの作成画面が表示されます。
[統合タイプ]と[統合ターゲット]を指定します。
[統合タイプ]はLambdaまたはHTTPが指定可能です。
今回はLambdaを指定し、ターゲットに「slackNotification」というLambda関数を指定しています。
[API名]を入力し、[次へ]をクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313035392f32346438303063622d343139382d396235622d313461622d3835316662653866376231392e706e67.png

[メソッド]、[リソースパス]、[統合ターゲット]を指定し、[次へ]をクリックします。
今回は「/slackNotification」に「POST」リクエストがあったら、Lambda関数「slackNotification」にリクエストを送信するよう設定しています。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313035392f31663233623262392d623435322d346533312d383836622d3739363565663534663335322e706e67.png

[ステージ名]を指定し、[次へ]をクリックします。
デフォルトでは「$default」ステージが設定されており、自動デプロイが「有効」になっています。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313035392f31323430346239322d653465652d633733662d616139322d3831393235363634653134622e706e67.png

設定を確認し、[作成]をクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313035392f62336664343964612d643735662d343737612d393234372d6437353163346632313630342e706e67.png

APIが作成されました。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3337313035392f66343131336634652d653661632d366238302d356233362d3664623535393965336537382e706e67.png

HTTP APIの実行

curlを使ってAPIにリクエストを送信してみます。
実行方法は当然これまでのAPIと変わりません。

curl -X POST -d '{"username": "test-user", "message": "テストメッセージ", "channel": "#work"}' https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/slackNotification

注目したいのは、API GatewayからLambdaに連携されるデータです。
下記にその例を示します。
リクエストボディが暗号化されているのが分かります。
上記POSTリクエストの'{"username": "test-user", "message": "テストメッセージ", "channel": "#work"}'にあたる部分です。
HTTP APIではデフォルトで、Base64エンコードが有効になっています。
Lambda側の処理でデコードしてあげる必要があるので、注意が必要です。

{
    'version': 2, 
    'path': '/slackNotification', 
    'httpMethod': 'POST', 
    'headers': {
        (省略)
    }, 
    'multiValueHeaders': {
        (省略)
    }, 
    'queryStringParameters': None, 
    'multiValueQueryStringParameters': None, 
    'requestContext': {
        (省略)
    }, 
    'pathParameters': None, 
    'stageVariables': None, 
    'body': 'eyJ1c2VybmFtZSI6ICJ0ZXN0LXVzZXIiLCAibWVzc2FnZSI6ICLjg4bjgrnjg4jjg6Hjg4Pjgrvjg7zjgrgiLCAiY2hhbm5lbCI6ICIjd29yayJ9', 
    'isBase64Encoded': True
}

使ってみた感想

これまでのREST APIは設定方法がかなり難しい印象があったが、HTTP APIは直感的にかなり分かりやすいと感じました。
Base64エンコードの部分は少しハマりました。。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした