1
0

More than 1 year has passed since last update.

API GatewayとLambdaを連携させる

Last updated at Posted at 2022-12-12

構成図

APIGateway→Lambda→SNS
image.png

前提知識

  • AWS Lambda単体ではLambda関数の実行ができない。
    Lambda関数を実行させるためには、他のサービスリソースで処理を起動させるきっかけとなるトリガーが必要
    Lambdaを実行するトリガー
    ①トリガーと同期して関数を起動するタイプ
     例)API Gateway、手動実行
    ②イベントが発生したことを検知して非同期で関数を実行するタイプ
     例)Amazon S3、CloudWatch Log、CloudWatch Eventsからの実行

流れ

・SNSトピックの作成
・Lambdaの作成(SNS連携)
・LambdaのIAM設定
・API GatewayでAPIの作成
・動作確認

SNSトピックの作成

マネジメントコンソールのSNSの画面からトピックの作成をします。
タイプはスタンダードに変更。名前を「SNS-Lambda-Test」と設定しました。
これ以下はすべてオプションなので飛ばして「トピックの作成」をクリックします。
image.png
作成したトピックのサブスクリプションを作成します。
「サブスクリプションの作成」をクリック。
image.png
今回はEメールで通知を受け取るので、自身のGmailを登録します。詳細の設定が完了したらスクロールして「サブスクリプションの作成」をクリック。
image.png
このままではステータスが以下のように保留中になっています。設定したメールアドレスの受信メールを確認すると、「AWS Notification -Subscription Confirmation」というメールを受信しているはずなので、そこでサブスクリプションを確定します。
image.png
その後ブラウザをリロードして再度ステータスを確認するとすぐに確認済みに変わります。これを確認できればSNSの設定は以上です。

Lambda関数の作成

一から作成」を選択し、関数名を「SNS-Lambda-Test」に設定し、ランタイムに「Python 3.9」を選択。
その他はデフォルトのままで下までスクロールして「関数の作成」をクリック。
image.png
関数の作成ができました。これからは関数の設定を行います。以下のコードタブを開きます。
image.png
コードソースを以下の通りに書き換えます。TopicArnの部分は先ほど作成したSNSのARNを入れます。
image.png

import boto3
client = boto3.client('sns')

def lambda_handler(event, context):
    params = {
    'TopicArn': 'arn:aws:sns:ap-northeast-1:816394368809:SNS-Lambda-Test',
    'Subject': 'Subject Lambda(python) -> Test Mail dayo',
    'Message': 'Message\n\nLambda -> Hi!\n Have a good day:)'
    }
    
    client.publish(**params)

変更後、Deployをクリック。「関数 SNS-Lambda-Test が正常に更新されました。」の表記を確認。
image.png

LambdaのIAM設定

IAMポリシーを開き、「ポリシーを作成」をクリック。
image.png
以下の通り、サービスをSNS・アクションを書き込み>Publish・リソースはすべてのリソースで設定し、下にスクロールして「次のステップ」をクリック。
image.png
今回はタグを設定せず「次のステップ」をクリック。
image.png
名前を設定して下にスクロールして「ポリシーの作成」をクリック。
image.png

次にLambdaの画面に戻り、設定>アクセス権限>ロール名の青文字をクリック。
image.png
ロールの画面に遷移するので、「許可を追加」をクリックし、「ポリシーをアタッチ」を選択
image.png
先ほど作成したポリシーにチェックをつけて下までスクロール。「ポリシーをアタッチ」をクリック。
image.png
ポリシーがアタッチされていることを確認
image.png
ポリシーの設定は以上です。

Lambdaのテスト

Lambdaの画面に戻り、「Test」をクリック。
image.png
以下のようにテストイベントを設定し、下までスクロールして「保存」をクリック。
image.png

以下のような結果が表示され、メールを受信できればテスト成功です。
image.png
Lambdaの設定は以上です。

APIGatewayでAPIの作成

APIの画面に移動して、API作成をクリック。
image.png
RESTAPIの「構築」をクリック。
image.png
「APIの作成」をクリック。
image.png
「リソースの作成」をクリック。
image.png
リソース名を入力して「リソースの作成」をクリック。
image.png
そのリソースを選択した状態で「アクション」>「メソッドの作成」をクリック
image.png
プルダウンからGETを選択してチェックマークをクリック。
image.png
総合タイプをLambda関数にし、Lambda関数の欄に先ほど作成したLambda関数名を入力。「保存」をクリック。
image.png
「OK」をクリック。
image.png
以下のページに遷移するので、中央あたりにある「テスト」をクリック。
image.png
何も入力せずに再度「テスト」をクリック。
image.png
右側にテスト結果が表示されます。
ステータス:200であり、メールを受信することができたので、テスト成功です。
image.png
アクション>APIのデプロイをクリック。
image.png
デプロイの詳細を設定。今回はdevステージにデプロイします。
image.png
デプロイするとこの画面に遷移します。
image.png
URLの呼び出し:https://~~のURLにリクエストを投げるとLambdaで処理して返してくれるのですが、注意点があります。今回作成したGETのリクエストを投げるには、このURLではなく、ステージの下にあるdevを展開したGETページで表示されるURLが必要です。このGETページのURLを動作確認で使用するためにメモしておきます。
設定は以上で終了です。
image.png

動作確認

コマンドプロンプトを開き、以下のコマンドを実行。
https:// のURLは作成したAPIのステージのページで確認した「URLの呼び出し」のものを入力。

curl https://xxxxxxxxxxxxxxxxx

nullと返ってきて、無事メールを受信することができました!!
image.png

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