2022-04-06
Lambda 関数に個別の URL を設定できる AWS Lambda Function URLs を試す
AWS 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以降でサポート
Footnotes
-
aws lambda get-function-url-config helpの出力から確認 ↩