1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】AWS Lambda Function URLsを検証!

Last updated at Posted at 2024-11-02

はじめに

この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。

今回はAWS Lambdaの機能として提供されたAWS Lambda Function URLs(以下、Function URLs)を検証してみます。

この記事で伝えたいこと(Point)

  • AWS Lambda Function URLsを使うとAPI Gatewayを使わずにLambdaの機能だけでAPIエンドポイントURLを作成できるよ
  • AWS Lambda Function URLsの特色はどこかについて説明しているよ

LambdaがURLを発行するようになったね

AWS Lambda Function URLs の提供開始: 単一機能のマイクロサービス向けの組み込み HTTPS エンドポイント - Amazon Web Services ブログ

もうみなさん使っていると思いますが、ご存知ない人もいるため、簡単に説明します。

AWS Lambda Function URLs(Function URLs)とは

簡単に説明すると、AWSのサービスでAPIを作成する手段が増えたという話です。
URLでLambdaを開けるようになったとも言います。

今までWeb APIを作成しようと思ったときはAmazon API Gatewayを使う必要があります。
つまり、API GatewayでLambdaを実行するための入り口を作ります。

Function URLsがなかった場合は主に以下の方法でLambdaを実行できました。

  • AWS CLIで実行
  • AWS マネジメントコンソールで実行
  • AWS SDK / AWS CDKで実行
  • イベントをキャッチして実行(イベント駆動)

ただし、実行方法については開発スタイルによって実行手段が限られてくるため、上記の方法がすべて利用できるわけではありません。(役に立つわけではないという意味)

「APIを実行したい。けど、API Gatewayまで作る必要はないんだよなぁ」みたいな状態でもFunction URLsを使えば、LambdaだけでWeb APIを開発できます。

実際に使ってみよう

今回はFunction URLsを使ってLambdaにアクセスしてみます。

Lambda関数でHello World

Lambda関数を作る

まずは東京リージョンのAWSマネジメントコンソールからAWS Lambdaを検索してクリックします。

Screenshot 2024-11-02 at 21.42.23.png

左メニューからFunctionsをクリックします。

Screenshot 2024-11-02 at 21.43.38.png

東京リージョンであることを確認した上でCreate functionをクリックします。

Screenshot 2024-11-02 at 21.44.16.png

Author from scratchを選択します。

Screenshot 2024-11-02 at 21.47.14.png

Basic informationを設定します。以下のとおりに設定します。

項目
Function name LineFuncUrls
Runtime Python3.12
アーキテクチャ x86_64

Screenshot 2024-11-02 at 21.47.22.png

Invoke modelはデフォルトの設定で問題ありません。

Screenshot 2024-11-02 at 21.48.19.png

Additional Configurationsを設定します。ここでFunction URLsの設定があります。デフォルトでチェックが無効になっているため、忘れずにチェックしてください。

Auth TypeはNoneにします。

Screenshot 2024-11-02 at 21.48.03.png

AWS LambdaのロールはCreate a new role with basic Lambda permissions(新規作成)を選択します。

Screenshot 2024-11-02 at 21.47.30.png

最後にCreate functionをクリックします。

Screenshot 2024-11-02 at 21.48.38.png

動作確認

作成を実行すると画面がLambdaの編集画面に遷移します。
画面右側にあるURLをクリップボードにコピーして開きます。※赤枠のアイコンをクリックしてください。

Screenshot 2024-11-02 at 22.06.13.png

小さく表示されますが、無事にURLを発行できました。

Screenshot 2024-11-02 at 22.11.27.png

Function URLsはどのようなところに使えるか

動作イメージができたところでそもそもどういうところで使えるのか見ていきたいと思います。
筆者の思いつく範囲では以下のとおりです。

  • LINE Messaging APIのWebhookに利用できる
  • シンプルにAPIとして利用できる

LINE Messaging APIのWebhookに利用できる

Messaging APIではWebhook URLを設定しますが、このURLでFunction URLsのURLが利用できます。なお、オウム返しのLINE botを作る場合は以下のPythonコードで実装できます。
※イベントオブジェクトは中身をチェックして返す必要がありますが、そのあたりは割愛

import json
import os
import urllib.request
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

#環境変数
LINE_CHANNEL_ACCESS_TOKEN   = os.environ['LINE_CHANNEL_ACCESS_TOKEN']

REQUEST_URL = 'https://api.line.me/v2/bot/message/reply'
REQUEST_METHOD = 'POST'
REQUEST_HEADERS = {
    'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN,
    'Content-Type': 'application/json'
}

def lambda_handler(event, context):

    if not json.loads(event['body'])['events']:
        return 0

    logger.info(json.loads(event['body'])['events'][0]['message'])
    message = str(json.loads(event['body'])['events'][0]['message']['text'])
    reply_token = json.loads(event['body'])['events'][0]['replyToken']

    #返信メッセージ
    REQUEST_MESSAGE = [
        {
            'type': 'text',
            'text': message
        }
    ]
    params = {
        'replyToken': reply_token,
        'messages': REQUEST_MESSAGE
    }
    request = urllib.request.Request(
        REQUEST_URL, 
        json.dumps(params).encode('utf-8'), 
        method=REQUEST_METHOD, 
        headers=REQUEST_HEADERS
        )
    response = urllib.request.urlopen(request, timeout=10)
    return 0

シンプルにAPIとして利用できる

今回はAuth TypeをNoneに設定して簡単に作成していますが、しっかり設定するとIAMベースの認証APIが作成できます。たとえば、EC2やECSからセキュアなAPIアクセスも可能です。

余談:Google CloudのCloud Run functionsでは自動でエンドポイントURLが作成される

サーバレスサービスにURLでアクセスするというと、Google CloudではCloud Run functions(旧:Cloud Functions)というものがあります。

Cloud Run functionsではエンドポイントURLが自動で作成されますが、AWS Lambda Function URLsでは設定していない限りエンドポイントURLが作成されません。

まとめ

今回はAWS Lambda Function URLsを検証しました。今までAPIを作って対応していたところの一部で便利に利用できると思います。
お試しでLINE botを作るときはAPI Gatewayを作っていましたが、その必要も無くなったのでそういう点でもGoodな機能でした。

おわり

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?