LoginSignup
0
0

More than 1 year has passed since last update.

API Gateway POSTメソッド+Lambda 作成の備忘

Last updated at Posted at 2021-10-09

構成

[Client] ⇒(リクエスト ※1)⇒ APIGateway ⇒ Lambda

※1
 IAM認証・・・不正リクエスト対策
        ※Client PCがウイルスにかかり、APIにリクエストが動く場合など
 IP制限 ・・・不正アクセス対策

POSTのAPI リクエストのcontent-type

世の中のAPIを見ると、リクエストのcontent-typeが、
application/jsonのものと、application/x-www-form-urlencodedのものがあります。
両方に対応しているAPIもありました。
application/jsonの数が増えつつあるというところでしょうか。

x-www-form-urlencoded.
flg=1&id=2
application/json.
{"flg":1,"id":2}

API Gatewayの設定について

・リソースポリシーで、IP制限を設定

メソッドリクエストで、IAM認証を設定

ゲートウェイレスポンスについて。

カスタマイズで、{"message":}のフォーマットを変更してしまったが。
次回からは変更しない方がいい気がしています。
変更すると、エラーの内容によってフォーマットが変わるから、全部合わせて変更しないと気になります。

・統合リクエストで、Lambdaプロキシ統合を選択

要件を満たせる場合は、個人的にLambdaプロキシ統合での作成が好きです。
APIGateway内でリクエストご編集したり、レスポンスを編集したりしなくていい。Lambda開発で完結するため。
https://qiita.com/yuuwatanabe/items/a3bd65e709f20574b6db

・IAM認証用のユーザーの作成について

ポリシーについては、必要な権限のみ振り出す。
 https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-iam-policy-examples-for-api-execution.html
より

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:*:a123456789/test/POST/mydemoresource/*"
      ]
    }
  ]
}

Lambdaの設定について

・Lambdaプロキシ統合のため、レスポンスの形式が決まっています。https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },
    "body": "..."
}

・コールドスタート対策について

①コールドスタートを発生させないようにする
 Provisioned Concurrency ※常時コンテナ作っておく。お金かかる。
 https://dev.classmethod.jp/articles/lambda-provisioned-concurrency-coldstart/
 ※コンテナの作成数を超えると、もちろんコールドスタートは発生します。
②コールドスタートのレイテンシーを短くする
 1.Lambdaのメモリを増やす。
  ⇒メモリを増やすと、CPUが変わる(性能よくなる)ので、
   変更し、APIGatewayのアクセスログのレイテンシーを見ながら調整できます。
   ※Lambdaデプロイ後の一回目は必ずコールドスタートになります。
 2.追加ライブラリを減らす。サイズを減らす
  コールドスタート時には、追加ライブラリをコンテナにダウンロード、
  展開が行われます。
  なので、減らず、サイズを小さくするとその分時間短縮になります。
  https://dev.classmethod.jp/articles/remote-py-2-lambda-tuning/
  ※元々、boto3を追加しようとしていたのですが、
   python3.7でboto3を追加しなくてもライブラリが使えました。
   マニュアルには、python3.8~と記載していたような。。
 3.コードの調整
  ※実際コードをあれこれ変更してわかった
  以下の定義を、Dynamodbへのリクエストを関数ごとに
  3回記載していたのですが。
  dynamodb = boto3.resource('dynamodb')
  これを、グローバル変数にして、
  DYNAMODB = boto3.resource('dynamodb')
  各関数で以下のようにすると、レイテンシーがかなり変わりました。
  DYNAMODB.Table('user')

・テストについて

Lambdaのテスト>テストイベント>テンプレートのapigateway-aws-proxy があります。(lambdaプロキシ統合用)
キャプチャ.JPG

テストについて

使用可能であれば、POSTMANが便利です。
※IAM認証の設定もさくっとできます。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/iam-authentication-api-gateway/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0