Lambda 関数に個別の URL を設定できる AWS Lambda Function URLs を試す
2022-04-07AWS Lambda の各関数に対して個別の URL を割り当てる機能 AWS Lambda Function URLs がリリースされたので試してみます。
例のごとく、諸々の操作は AWS CLI v1 (1.22.90
以降) で既に対応している (v2 は多分 数日後に対応) ので CLI で操作します。
追記 (2022/04/09)
v2 に関しても 2.5.4
でサポートされました。
追記 2 (2022/04/22)
CloudFormation でも構築できるようになっていたので試しました。
AWS Lambda Function URLs の概要
詳細は下記の AWS 公式ブログを参照してください。
- AWS Lambda の各関数に個別の URL を割り当て、 HTTPS で Lambda 関数を invoke できるようになる
- API Gateway の設定が不要になる
- URL は Lambda 関数のバージョンに対して設定する
- 複数設定でき、例えば開発中の確認用を
$LATEST
に設定し、安定版やステージング用を他の任意のエイリアスに設定する といったことが可能
- 複数設定でき、例えば開発中の確認用を
- Functions URLs の設定自体に料金は発生せず、 Lambda 関数の実行に対して発生する料金に含まれる
- 認可方法としては IAM もしくは 無し (完全にパブリック) が選択できる
- CORS も設定可
- リクエストヘッダの Content-type は
application/json
もしくはtext/*
を指定する必要がある- 指定しない場合、 base64-encoded な値として渡されるので Lambda 関数側で decode が必要になる
- API Gateway との使い分け
- 下記のような API Gateway の機能を使いたいかどうか
- リクエスト時のバリデーション
- スロットリング
- カスタムオーソライザー
- カスタムドメイン
- 使用プラン
- キャッシュ
- webhook のハンドラなどであれば Functions URLs がよさそう
- 下記のような API Gateway の機能を使いたいかどうか
追加されたリソース
Functions URLs のリリースに伴って FunctionUrlConfig
という新しいリソースが増えています。1
FunctionUrl (string)
発行された HTTP URL。
FunctionArn (string)
設定されている Lambda 関数の ARN
AuthType (string)
認可タイプ。 AWS_IAM
または NONE
Cors (structure)
CORS の設定。詳細は下記の項目。
AllowCredentials (boolean)
Cookie やその他のクレデンシャルを許可するかどうか。デフォルト false
。
AllowHeaders (list)
リクエスト時に許可するヘッダ (string) のリスト。
AllowMethods (list)
許可するメソッド (string) のリスト。
AllowOrigins (list)
許可する origin (string) のリスト。
ExposeHeaders (list)
オリジンに対して公開したいレスポンスヘッダ (string) のリスト。
MaxAge (integer)
ブラウザの preflight request をキャッシュする時間 (秒)。デフォルト 0
。
CreationTime (string)
FunctionUrlConfig が作成された日時。ISO-8601 (YYYY-MM-DDThh:mm:ss.sTZD).
LastModifiedTime (string)
FunctionUrlConfig が更新された日時。ISO-8601 (YYYY-MM-DDThh:mm:ss.sTZD).
AWS CLI に追加されたサブコマンド
AWS CLI にも、そのリソースに対する create, delete, get, list, update のサブコマンドが増えています。
aws lambda help | grep function-url
o create-function-url-config
o delete-function-url-config
o get-function-url-config
o list-function-url-configs
o update-function-url-config
例えば create-function-url-config
のパラメータは下記のとおりです。
SYNOPSIS
create-function-url-config
--function-name <value>
[--qualifier <value>]
--auth-type <value>
[--cors <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
function-name
URL を発行したい Lambda 関数の名前 または ARN を指定します。
qualifier
URL を発行したい Lambda 関数のエイリアス。指定しない場合 $LATEST
になります。
auth-type
認可方法。 AWS_IAM
または NONE
を指定します。
cors
CORS の設定。下記内容で設定します。
{
"AllowCredentials": true,
"AllowHeaders": [
""
],
"AllowMethods": [
""
],
"AllowOrigins": [
""
],
"ExposeHeaders": [
""
],
"MaxAge": 0
}
設定してみる
だいぶ前に作って放置していた umiwind-lambda
という関数があったので、それに対して設定してみます。
今回はとりあえず試してすぐ消すので認可はなし、 CORS も *
で設定して完全なパブリック状態で試す。この状態で URL が割れたらと思うと怖いですね。
aws lambda create-function-url-config \
--function-name 'umiwind-lambda' \
--auth-type 'NONE' \
--cors 'AllowCredentials=false,AllowMethods=GET,AllowOrigins=*'
出力。
{
"FunctionUrl": "https://ouws7qavn54XXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws/",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:000000000000:function:umiwind-lambda",
"AuthType": "NONE",
"Cors": {
"AllowCredentials": false,
"AllowMethods": [
"GET"
],
"AllowOrigins": [
"*"
]
},
"CreationTime": "2022-04-06T23:32:56.130866Z"
}
curl
で叩いてみます。
curl https://ouws7qavn54XXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws/ | jq
出力。
{
"ja": {
"date": "2022/04/07",
"vector": "北北東",
"time": "08:55",
"velocity": "8 m",
"message": "[2022/04/07 08:55 JST] 現在の風向は 北北東 風速は 8 m です"
},
"en": {
"date": "2022/04/07",
"vector": "NNE",
"time": "08:55",
"velocity": "8 m",
"message": "[2022/04/07 08:55 JST] The current wind direction is NNE and the wind speed is 8 m."
},
"message": "ok"
}
無事にうみほたるの風向・風速が取れました。簡単。
削除
delete-function-url-config
サブコマンドで削除します。
aws lambda delete-function-url-config \
--function-name umiwind-lambda
まとめ
- Lambda 関数を HTTP URL で invoke できるようになった
- AWS CLI は、
慣習通り今はまだ v1 のみ利用可v1 は1.22.90
以降、 v2 は2.5.4
以降でサポート
-
aws lambda get-function-url-config help
の出力から確認 ↩︎
comments powered by Disqus