【AWS】Lambda Function URLsでHTTPエンドポイントを公開する方法

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

API Gatewayを使わずにLambdaをHTTPで呼び出したい」とお悩みではありませんか?

Lambda関数を手軽にWeb APIとして公開したい方へ。

Lambda Function URLsを使えば、追加のサービスなしでLambdaに専用のHTTPSエンドポイントを割り当てられます

いずみ

API Gatewayの設定が要らないぶん、かなりシンプルです。

ということで、本記事ではLambda Function URLsでHTTPエンドポイントを公開する方法を解説します。

いずみ

すぐ読み終わるので、ぜひ最後まで読んでくださいませ。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

【AWS】Lambda Function URLsでHTTPエンドポイントを公開する方法

早速ですが、Lambda Function URLsでHTTPエンドポイントを公開する手順を解説します。

Lambda Function URLsとは

Lambda Function URLsは、Lambda関数に固定のHTTPSエンドポイントを割り当てる機能です。

エンドポイントはhttps://<url-id>.lambda-url.<region>.on.aws という形式で発行されます。

API GatewayやApplication Load Balancerを挟まずに、Lambda関数を直接HTTPで呼び出せます。

認証方式はIAM認証(AWS_IAM)と認証なし(NONE)の2種類から選べます。

単一の関数で完結する小規模なAPIやWebhookの受け口に向いています。

いずみ

複雑なルーティングや使用量プランが必要なら、API Gatewayを選ぶほうが無難です。

事前に用意するもの

実行ロールを付与したLambda関数を1つ用意します。

ランタイムはPython 3.13を例にします。

AWS CLIを使う場合は、認証情報を設定済みのプロファイルが必要です。

Function URLを作成する

Function URLを作成する方法を、マネジメントコンソール・AWS CLI・boto3の順に解説します。

STEP
マネジメントコンソールで有効化する

Lambda関数の画面を開き、「設定」タブの「関数URL」から「関数URLを作成」を選びます。

認証タイプでNONE を選ぶと、誰でもアクセスできる公開エンドポイントになります。

「CORSを設定」にチェックを入れると、ブラウザからの呼び出しに必要なヘッダーをLambda側で付与できます。

STEP
AWS CLIで作成する

コマンドラインからは create-function-url-config で作成します。

aws lambda create-function-url-config \
  --function-name my-http-func \
  --auth-type NONE \
  --cors '{"AllowOrigins":["*"],"AllowMethods":["GET","POST"],"AllowHeaders":["content-type"]}'

認証タイプをNONE にした場合は、呼び出しを許可するリソースベースポリシーの追加も必要です。

aws lambda add-permission \
  --function-name my-http-func \
  --statement-id FunctionURLAllowPublicAccess \
  --action lambda:InvokeFunctionUrl \
  --principal "*" \
  --function-url-auth-type NONE
STEP
boto3で作成する

Pythonからはlambda クライアントのcreate_function_url_config を呼び出します。

import boto3

client = boto3.client("lambda", region_name="ap-northeast-1")

resp = client.create_function_url_config(
    FunctionName="my-http-func",
    AuthType="NONE",
    Cors={
        "AllowOrigins": ["*"],
        "AllowMethods": ["GET", "POST"],
        "AllowHeaders": ["content-type"],
        "MaxAge": 3600,
    },
)

client.add_permission(
    FunctionName="my-http-func",
    StatementId="FunctionURLAllowPublicAccess",
    Action="lambda:InvokeFunctionUrl",
    Principal="*",
    FunctionUrlAuthType="NONE",
)

print(resp["FunctionUrl"])
いずみ

add_permissionを忘れると、公開設定でも403が返ってくるので注意です。

Lambda関数でリクエストを処理する

Function URLへのリクエストは、API Gateway HTTP APIと同じペイロード形式バージョン2.0でLambdaに渡されます。

HTTPメソッドはevent["requestContext"]["http"]["method"] 、パスはevent["rawPath"] で取得できます。

クエリ文字列はevent["queryStringParameters"] 、リクエストボディはevent["body"] に入ります。

レスポンスはstatusCodeheadersbody を持つ辞書を返す形式です。

import json


def handler(event, context):
    method = event["requestContext"]["http"]["method"]
    path = event["rawPath"]

    if method == "GET" and path == "/hello":
        params = event.get("queryStringParameters") or {}
        name = params.get("name", "world")
        return {
            "statusCode": 200,
            "headers": {"Content-Type": "application/json"},
            "body": json.dumps({"message": f"Hello, {name}!"}),
        }

    if method == "POST" and path == "/echo":
        payload = json.loads(event.get("body") or "{}")
        return {
            "statusCode": 200,
            "headers": {"Content-Type": "application/json"},
            "body": json.dumps({"received": payload}),
        }

    return {"statusCode": 404, "body": "Not Found"}

動作確認はcurlでエンドポイントを叩くだけです。

curl "https://<url-id>.lambda-url.ap-northeast-1.on.aws/hello?name=izumi"

CORSと認証を設定する

ブラウザのJavaScriptから呼び出す場合は、Function URLのCORS設定でオリジンを許可します。

AllowOrigins に本番ドメインを指定し、ワイルドカードの* は開発時だけに留めるのが安全です。

Lambda側でCORS用ヘッダーを手動で返す必要はなく、Function URLの設定でプリフライトへ自動応答します。

認証タイプをAWS_IAM にすると、呼び出し側はSigV4署名付きリクエストを送る必要があります。

社内ツールなど呼び出し元を限定したい場合はAWS_IAM 、一般公開のWebhookならNONE を選びます。

いずみ

認証なしで公開するときは、Lambda側でトークン検証やレート制限を自前で入れておくと安心です。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式

【厳選】フリーランスエンジニアにおすすめなエージェント3選

フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。

僕が実際に利用しているおすすめエージェントを紹介しますね。

いずみ

エージェントは必ず複数登録してください。

担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…

僕は実際に5つのエージェントを使い回していますよ。

フリーランスを始めるなら「

案件数マージン率単価
約88,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 業界最大級の案件数。
  • 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
  • 案件参画中のフォローの充実。

※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。

は業界最大手のフリーランスエージェントです。

とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!

いずみ

僕もはじめてフリーランスの案件を貰ったのはです。

保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。

手厚い保障を重視したいなら「

案件数マージン率単価
約10,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 手厚い保障で正社員並みの安心感。
  • 還元率60%超え&単価公開でクリアな契約。
  • 給与保障制度(審査あり)。

は手厚い保障が特徴のフリーランスエージェントです。

フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。

いずみ

僕も何度か案件を紹介してもらいました。

自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。

週2〜3日の案件探しなら「

案件数マージン率単価
約5,000件非公開
初心者福利厚生申し込み
経験者向け無料
Good Point
  • IT案件に特化したフリーランスエージェント。
  • 週2〜3日の案件が豊富。
  • リモート案件が多く、直エンドなので単価も高い。

※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。

はIT案件に特化したフリーランスエージェントです。

週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。

いずみ

週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。

とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!

よくある質問

Function URLとAPI Gatewayはどちらを使うべきですか?

単一関数のシンプルなAPIやWebhookならFunction URLsが手軽です。

複数ルートの管理・使用量プラン・APIキー・WAF連携が必要ならAPI Gatewayが向いています。

Function URLにカスタムドメインを割り当てられますか?

Function URL自体にカスタムドメインを直接設定する機能はありません。

CloudFrontをFunction URLの前段に置き、CloudFront側で独自ドメインとTLS証明書を設定する構成が一般的です。

レスポンスをストリーミングできますか?

InvokeModeをRESPONSE_STREAM にすると、生成しながら順次レスポンスを返せます。

大きな生成結果や逐次表示したいケースで、体感の待ち時間を短くできます。

認証なしのFunction URLは誰でも叩けてしまいますか?

認証タイプがNONE の場合、URLを知っていれば誰でも呼び出せます。

Lambda側での入力検証、DynamoDB等を使ったレート制限、CloudFrontとWAFの併用で保護します。

まとめ

今回は、Lambda Function URLsでHTTPエンドポイントを公開する方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • Lambda Function URLsはLambda関数に専用のHTTPSエンドポイントを割り当てる機能。
  • 作成はコンソール・AWS CLIのcreate-function-url-config・boto3のいずれでも可能。
  • 認証タイプはNONEとAWS_IAMから選び、CORSはFunction URLの設定で完結する。
  • リクエストはペイロード形式2.0で渡り、statusCode・headers・bodyの辞書を返す。
まとめ
いずみ

最後までお読みいただき、ありがとうございました!

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次