Lambdaの実行権限とAPI Gatewayを作成する

ポリシーがよくわからないのでちょっと勉強します。

f:id:ponsuke_tarou:20210222184408j:plain
板橋区赤塚の岩乃湯

IAMのポリシーを作成する

  1. AWSマネジメントコンソールにある[IAM] > サイドメニューの[ポリシー]
  2. [ポリシーの作成]ボタンで作成画面を開きます。
  3. [JSON]タブを開いて権限の設定内容を入力します。
  4. [次のステップ:タグ]ボタンから次の画面でタグを設定(設定しなくてもOK) > [次のステップ:確認]ボタン
  5. 確認画面へ遷移して[名前(必須)]と[説明(任意)]を入力します。
    • f:id:ponsuke_tarou:20191121094418p:plain
      確認画面
  6. [ポリシーの作成]ボタンでポリシーを作成して一覧画面に戻ります。

IAMのロールを作成する

  1. AWSマネジメントコンソールにある[IAM] > サイドメニューの[ロール]
  2. [ロールの作成]ボタンで作成画面を開きます。
  3. [AWSサービス] > [Lambda]を選択後に[次のステップ: アクセス権限]ボタンで次の画面を開きます。
    • f:id:ponsuke_tarou:20210222183543p:plain
  4. [Attach アクセス権限ポリシー]の[ポリシーのフィルタ]で作成したポリシーを検索して選択後に[次のステップ: タグ]ボタンで次の画面を開きます。
    • f:id:ponsuke_tarou:20210222183711p:plain
  5. [タグの追加 (オプション)]は任意なので設定せずに[次のステップ: 確認]ボタンで確認画面を開きます。
  6. [ロール名]を入力して[ロールの作成]ボタンでロールを作成して一覧画面に戻ります。

f:id:ponsuke_tarou:20210222184640j:plain
板橋区常盤台の岩の湯

Lambda関数を作る

実装を後回しにして関数だけ作ります。

  1. [AWS マネジメントコンソール]から[Lambda]の画面を開く
  2. [関数の作成]ボタンで作成画面を表示する
  3. [一から作成]を選択して以下を設定して[関数の作成]ボタンで関数を作成する
    • 関数名 : 任意の名前
    • ランタイム : 使いたいもの
    • 実行ロール : 既存のロールを使用する
    • 既存のロール : 作成したロールを選択

f:id:ponsuke_tarou:20210222190036p:plain

コードには初期コードがあるのでそのまま。実装はAPI Gateway作成後にやります。

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

API Gatewayを作成する

作成する種類は上記の参考リンクを読んで決めました。

  1. [AWS マネジメントコンソール]から[API Gateway]の画面を開く
  2. [APIを作成]ボタンで[APIの作成]画面を表示する
    • f:id:ponsuke_tarou:20210222190405p:plain

HTTP APIで作成する

  1. [HTTP API]の[構築]ボタンで次の画面へ
    • f:id:ponsuke_tarou:20210222190727p:plain
  2. [統合を追加] > [Lambda] > [Lambda 関数]で作成したLambda関数を選択
  3. [API 名]に任意の名前を設定して[次へ]ボタンで[ルートを設定]画面へ
    • f:id:ponsuke_tarou:20210222190849p:plain
  4. 以下を設定して[次へ]ボタンで[ステージを定義]画面へ
    • メソッド : POST
    • リソースパス : /{Lambda関数名}
    • 統合ターゲット : {Lambda関数名}
    • f:id:ponsuke_tarou:20201119161434p:plain
  5. [ステージを追加]ボタンで以下を追加して[次へ]ボタンで[確認して作成]画面へ
    • ステージ名 : $default
    • 自動デプロイ : ON
    • f:id:ponsuke_tarou:20201119161459p:plain
  6. [作成]ボタンで作成する
    • f:id:ponsuke_tarou:20201119161603p:plain
  7. 「{Lambda関数名}のステージ」一覧の[URLを呼び出す]列に「呼び出しURL」が表示される
  8. curlコマンドを使ってAPI Gatewayを呼び出してAPI GatewayがLambda関数を呼び出せることを確認する
curlコマンドのオプション 意味
-X HTTPメソッドを指定する
-H HTTPヘッダを指定する
# Lambda関数の初期コードに書いてある「Hello from Lambda!」が返却される
$ curl -X POST -H 'Content-Type:application/json' {呼び出しURL}/{リソースパス}
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
}
100    20  100    20    0     0     50      0 --:--:-- --:--:-- --:--:--    50"Hello from Lambda!"

# 失敗例) 「リソースパス」をくっつけ忘れると「Not Found」になるので注意
$ curl -X POST -H 'Content-Type:application/json' {呼び出しURL}
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    23  100    23    0     0    287      0 --:--:-- --:--:-- --:--:--   291{"message":"Not Found"}