AWS

AWS Lambda 関数URLを設定しアクセスする方法【基礎】

AWS Lambda 関数URLを設定しアクセスする
エンジニア
Lambda 関数URLを使用してみたいです。サービスの概要と、かんたんな使い方を教えてください。

AWS経験3年以上の僕が、Lambda 関数URLの概要と、すぐに実行できる手順をご説明します。

 

本記事の内容

  • Lambda 関数URL (Lambda Function URLs) の概要
  • マネジメントコンソールでLambda 関数URLを設定する
  • 設定した関数URLにWebブラウザとCloudShellからアクセスする
  • 作成したLambda関数を削除する

Lambda 関数URL (Lambda Function URLs) とは

Lambda 関数URL (Lambda Function URLs) とは

Lambda 関数URLのサービス概要と、API Gateway+Lambdaの構成との比較を説明します。

 

Lambda 関数URLのサービス概要

Lambda 関数URLのサービス概要は以下のとおりです。

  • Lambda関数にURL(HTTPSエンドポイント)を設定する
  • そのURLにHTTPSでアクセスすることで、かんたんにLambdaを実行できる
  • URLをパブリックに公開する設定以外に、IAM認証やCORS設定も可能
  • Lambda 関数URL自体は無料(従来のLambda実行料金のみ)

 

API Gateway + Lambdaの構成よりシンプル

API Gateway + Lambdaの構成との比較

これまで、HTTPS経由でLambdaを実行するためには、前段にAPI Gatewayなどが必要でした。

Lambda 関数URLを使用することで、API GatewayなしでHTTPSから直接Lambdaを実行できます。

Lambdaをパブリックに公開したり、シンプルな認証でも問題ない場合は、Lambda 関数URLは便利ですね。

 

Lambda 関数URL 設定の準備

マネジメントコンソールを操作するIAMユーザーのIAMポリシーは、テスト目的のためAdministratorAccessが付与されているものとします。

今回はテスト用のLambda関数を作成し、関数URLを設定するだけなので、他のリソース準備は必要ありません。

 

Lambda 関数URLの設定手順

Lambda 関数URLの設定手順

以下の手順でLambda 関数URLを設定していきます。

  • Lambda関数作成と関数URL設定
  • 関数URLを確認
  • Webブラウザからアクセス
  • CloudShellからcurlコマンドでアクセス
  • Lambda関数を削除する

 

Lambda関数作成と関数URL設定

マネジメントコンソールにログインし、Lambdaの画面から [関数] -> [関数の作成]をクリックします。

Lambda関数作成1

 

関数は以下のとおり設定します。(記載していないものはデフォルトのまま)

  • 関数名: 任意(手順では [test-url] とする)
  • ランタイム: Python3.9

Lambda関数作成2

 

次に、画面下の[詳細設定] をクリックし、[関数 URL を有効化] にチェックを入れます。

[認証タイプ] は以下がありますが、今回は簡単にLambdaを実行したいので [NONE] を選択し、[関数の作成] をクリックします。

  • AWS_IAM: 関数URLにIAM認証を設定する
  • NONE: 関数URLにIAM認証を設定しない(Lambda関数に認証ロジックを実装しない限り、パブリックに公開される)

Lambda関数作成3

[オリジン間リソース共有 (CORS) を設定] について

  • チェックを入れて有効にすると、S3などに格納したJavaScriptファイルから関数URLにアクセスできる
  • デフォルトは無効なので、JavaScriptから関数URLにアクセスするとCORSエラーとなりLambdaを実行できない

 

参考:既存のLambdaに関数URLを設定する方法

対象のLambda -> [設定] -> [関数 URL] -> [関数 URL を作成] から [認証タイプ] を選択し、[保存] をクリックする。

 

関数URLを確認

関数URLは、マネジメントコンソールの以下2箇所から確認できます。

①[関数の概要] -> [関数 URL]

②[設定] -> [関数 URL] -> [関数 URL]

関数URL確認

 

参考:関数URLはリソースベースのポリシーが設定される

  • 関数URLを設定すると、Lambdaにリソースベースポリシーが自動設定される
  • これにより、関数URLからLambdaを実行できるようになる
  • ポリシーは、対象のLambda -> [設定] -> [アクセス権限] -> [リソースベースのポリシー] から確認できる
  • 以下は本手順で設定されたリソースベースのポリシー

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "FunctionURLAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:ap-northeast-1:123456789012:function:test-url",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "NONE"
        }
      }
    }
  ]
}

 

Webブラウザからアクセス

Webブラウザから関数URLにアクセスしてみます。

https://xxxxxxxxxxxxxxxxxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/

["Hello from Lambda!"] が返ってくれば、Webブラウザから関数URLを経由してLambdaを実行できたことになります。
Webブラウザからアクセス

 

CloudShellからcurlコマンドでアクセス

次に、CloudShellからLambdaを実行してみます。

マネジメントコンソールからCloudShellを起動します。

CloudShell起動

 

CloudShellが起動したらcurlコマンドで関数URLを指定、Lambdaを実行してみます。

["Hello from Lambda!"] が返ってきたので、CloudShellからも関数URLを経由してLambdaを実行できました。


$ curl https://xxxxxxxxxxxxxxxxxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/
"Hello from Lambda!"

 

Lambda関数を削除する

今回は認証タイプ[NONE] で関数URLを設定したので、パブリックに公開されたままです。

このままだと、仮にURLが分かると誰でもLambdaが実行できてしまいます。

不正にLambdaを実行されると困るので、作成したLambdaは削除しておきましょう。

Lambda関数の画面右上にある [アクション] -> [関数の削除] をクリック。

Lambda関数削除1

 

[削除] をクリックすると、Lambdaが削除されます。

Lambda関数削除2

 

参考:Lambda作成時 / 実行時に自動作成されるリソースはLambdaを削除しても残る

Lambdaをマネジメントコンソールから新規作成すると、自動的にIAMポリシーとIAMロールが作成され、Lambdaに設定されます。

また、Lambdaを実行するとCloudWatch Logsロググループも自動的に作成されてログが保存されます。

マネジメントコンソールからLambdaを削除しても上記のリソースは残るので、一緒に削除することをおすすめします。

各リソース名は以下のとおりです。

  • IAMロール: <Lambda関数名>-xxxxxx(Lambda削除前であれば、対象のLambda -> [設定] -> [アクセス権限] -> [実行ロール] から確認できる)
  • IAMポリシー: 上記のロールにアタッチされているポリシー
  • CloudWatch Logsロググループ: /aws/lambda/<Lambda関数名>

 

まとめ

Lambdaの関数URLを設定し、かんたんにアクセスする方法を紹介しました。

API Gatewayを使用せず、HTTPS経由で手軽にLambdaを実行できるようになったのは素晴らしい機能アップデート!

Lambdaをパブリックに公開したり、シンプルな認証でも問題ない場合は、Lambda 関数URLは積極的に活用できそうですね。

-AWS

© 2022 ふにノート