7
Help us understand the problem. What are the problem?

posted at

updated at

Organization

【AWS】関数URLを利用して外部からLambda関数を呼び出す

1.はじめに

どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

2022年4月6日にLambda関数に「関数URL」という機能が追加されたようです。

一言でいうと、API Gatewayの設定なしで外部からLambda関数を呼べるみたいです!
そこで今回はLambda関数の関数URLの使い方を説明したいと思います♪
AWSについて勉強中の方の参考になれば幸いです。
(*^^)v

2.用語の説明

2.1.Lambdaとは

LambdaとはAWSのサービスの1つで、コードを書くだけで即実行ができるサービスのことです。
サーバの設定等が不要なため、便利です。

ただし、15分以上続けて実行することはできないため、
複雑なアプリケーションの場合はEC2やECRでの実行が必要となります。

3.前提条件

  • Lambda関数が作成済であること
  • Lambda関数を実行するIAMユーザが作成済であること
  • 上記IAMユーザに「lambda:InvokeFunctionUrl」の権限が付与されていること
  • 上記IAMユーザのアクセスキー・シークレットアクセスキーの情報を取得していること

4.関数URLを設定する

では早速、関数URLを設定してみます。

4.1.Lambdaの管理画面から「設定」を選択します。

010_設定を選択.png

4.2.「関数URL-新規」を選択し、「関数URL」を作成を選択します。

020_関数URLを作成.png

4.3.以下の表のとおりに設定し、「保存」を選択します。

項目 設定内容
認証タイプ NONE
オリジン間リソース共有(CORS)を設定 チェックあり
許可オリジン *
許可メソッド *
030_設定画面_001.png

4.4.URLが表示されるので、コピーします。

040_URLの確認.png

4.5.ブラウザを開き、コピーしたURLにアクセスします。
4.6.Lambdaからの戻り値が表示されます。

050_URLへ接続.png

※以下のLambdaを使用した場合の画像となります。

import json
import logging

#ロガーの生成
logger = logging.getLogger('log')
#デバッグレベルの設定
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    # TODO implement
    logger.info(json.dumps(event));
    return {
        'statusCode': 200,
        'body': json.dumps('関数URLのテストです。',ensure_ascii=False)
    }

5.セキュリティ向上のため、IAMユーザの認証情報を使用して接続する

4節で外部からLambda関数を呼べることが分かりましたが、
そのままの設定では、URLを知っていれば、世界中の誰でもアクセスできるため、
IAMユーザの認証情報を使用して、外部からのアクセスを制限する方法について記載します。

5.1.関数URLの画面から「編集」を選択します。

060_編集を選択.png

5.2.認証タイプを「AWS_IAM」に変更し、「保存」を選択します。

070_認証方式を設定.png

5.3.ブラウザからアクセスするとエラーになります。

080_認証方式を変更後.png

5.4.コマンドプロンプトを開き、以下のコマンドを実行します。
※(IAMユーザのアクセスキー)と(IAMユーザのシークレットアクセスキー)の間にある「:」を忘れないようにしてください。

curl -XPOST "(関数のURL)" -H "Content-Type: application/json" --aws-sigv4 "aws:amz:ap-northeast-1:lambda" --user "(IAMユーザのアクセスキー):(IAMユーザのシークレットアクセスキー)"

5.5.Lambdaからの戻り値が表示されます。
(IAMユーザの認証情報を利用して認証ができています)

090_コマンド実行後.png

6.おわりに

ここまで読んで下さり、ありがとうございます!!!
(^^)

関数URLを使うことで、API Gatewayよりも簡単にLambda関数を呼び出すことができました!
ただ、POST・GETの場合に呼び出すLambdaを変えるということはできなさそうだったので、
その場合はAPI Gatewayが活躍するのかなと感じました。

AWSは今後もアップデートされるので、何か気づいたら記事にします♪
(:3_ヽ)_

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
7
Help us understand the problem. What are the problem?