✈️

AWS CDKを使ってLambda 関数URL(Function URLs)を設定してみた。(L2 Constractで)

2022/04/27に公開

先日、AWS CDKを使ってLambda 関数URL(Function URLs)を設定してみた。(L1 Constractで) という記事を書かせていただきましたが、
2022/04/22夜(JST)にL2 Constract対応が盛り込まれたv2.21.0(ちなみにBug Fixが入って、最新バージョンはv2.21.1)がリリースされました。
https://github.com/aws/aws-cdk/releases/tag/v2.21.0

ということで、早速試してみました。

APIドキュメントもアップデートされていたので、この辺を参考にします。
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionUrl.html

とりあえずL2で作る部分はこんな感じ。
今回は、Lambdaモジュールで作ってますが、nodejs向けLambdaモジュールでも使えました。

    const lambdaUrlFunctionL2 = new lambda.Function(this, 'lambdaUrlL2', {
      runtime: lambda.Runtime.NODEJS_14_X,
      code: lambda.Code.fromAsset('lambda'),
      handler: 'index.endpointHandler',
      timeout: Duration.seconds(30),
    });
    const lambdaUrlFunctionL2Url = new lambda.FunctionUrl(this, 'lambdaUrlL2Url', {
      function: lambdaUrlFunctionL2,
      authType: lambda.FunctionUrlAuthType.NONE
    })

    new CfnOutput(this, 'TheLambdaUrlFunctionL2', {
      // The .url attributes will return the unique Function URL
      value: lambdaUrlFunctionL2Url.url,
    });

何気に肝になるのは、最後のCfnOutputかも。
API Gatewayだと、作成するとURL出てきますが、これをつけることで、
実行後にURLが表示されます。
あれ、これって、L1でも使えたんじゃないか・・・(汗)

L1/L2比較

比較するとこんな感じです。

  • L1
    new CfnResource(this,  'lambda-url-cfn' , {
      type: 'AWS::Lambda::Url',
      properties: {
        TargetFunctionArn: lambdaUrlFunction.functionArn,
        AuthType: 'NONE'
      }
    });
    new CfnResource(this, 'lambda-url-Permision', {
      type: 'AWS::Lambda::Permission',
      properties: {
        FunctionName: lambdaUrlFunction.functionName,
        Principal: '*',
        Action: 'lambda:InvokeFunctionUrl',
        FunctionUrlAuthType: 'NONE'
      }
    });

(IDの付け方見直さないと)

  • L2
    const lambdaUrlFunctionL2Url = new lambda.FunctionUrl(this, 'lambdaUrlL2Url', {
      function: lambdaUrlFunctionL2,
      authType: lambda.FunctionUrlAuthType.NONE
    })

だいぶ減りましたね。
パーミッション設定なくなったのは大きい気がします。
カスタマイズ不要なら、標準設定でお願いしたい感あるので。


とりあえず、出たのやってみたの記事でした。
認証も相変わらず、NONEだし、CORSの設定もやってないので、その辺は引き続き。

あと、ありそうだけど、Output別で書かなきゃいけないの、自作できないかなとか思ってみたりw
https://dev.classmethod.jp/articles/aws-cdk-original-library-reference/

まだまだ出始めで、今後ユースケースも増えていきそうなFunction URLsですが、引き続きウォッチしていきたいと思います。

Discussion