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 関数の名前 または 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