✈️
AWS CDKを使ってLambda 関数URL(Function URLs)を設定してみた。(L2 Constractで)
先日、AWS CDKを使ってLambda 関数URL(Function URLs)を設定してみた。(L1 Constractで) という記事を書かせていただきましたが、
2022/04/22夜(JST)にL2 Constract対応が盛り込まれたv2.21.0(ちなみにBug Fixが入って、最新バージョンはv2.21.1)がリリースされました。
ということで、早速試してみました。
APIドキュメントもアップデートされていたので、この辺を参考にします。
とりあえず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
まだまだ出始めで、今後ユースケースも増えていきそうなFunction URLsですが、引き続きウォッチしていきたいと思います。
Discussion