michimani.net

Lambda 関数に個別の URL を設定できる AWS Lambda Function URLs を試す

2022-04-07

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 公式ブログを参照。

Announcing AWS Lambda Function URLs: Built-in HTTPS Endpoints for Single-Function Microservices | AWS News Blog

追加されたリソース

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 関数の名前 or 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

まとめ


  1. aws lambda get-function-url-config help の出力から確認 ↩︎


comments powered by Disqus