AWS CDKでLambda関数URLを使う
はじめに
先日Lambda関数URL(Function URLs)という機能を試してみました。
これを使うとAPI Gatewayを使わずに、Lambdaの設定からURLの発行ができます。
詳しくは公式ドキュメントを確認してください。
今回は、最初にマネジメントコンソールで機能を試した後、同様の環境をAWS CDKで実装します。
環境
関数URLの有効化(マネジメントコンソール)
早速、機能確認のためマネジメントコンソールから関数URLを有効化してみます。
Lambda関数の作成
まずはLambdaで関数を作成します。
関数名:
HelloFunctionURL
ランタイム:
Python 3.9
詳細設定
詳細設定を確認すると関数URLを有効化
があるので有効化します。
認証タイプ:
NONE
オリジン間リソース共有(CORS):
有効化
これらを入力した後、関数の作成
をクリックします。
"Hello from Lambda!"とレスポンスを返すシンプルな関数が作成されます。
import json def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
動作確認
早速、設定
タブから関数URL
を開くと既に有効化されたURLが記載されています。
URLをクリックすると実行結果が表示されます。
関数URLの有効化にチェックするだけなのでお手軽で良い感じです。
関数URLの有効化(AWS CDK)
同様の実装をCDKでも試してみます。
実装はAWS公式のbuilders.flash
の記事を参考にさせて頂きました。
- プロジェクト用のディレクトリ作成
mkdir cdk-lambda-url-test
- CDKの初期化
cdk init app --language typescript
cdk.json
にリージョン情報を追記
〜〜省略〜〜 ], "context": { "region": "ap-northeast-1" } } }
bin/cdk-lambda-url-test.ts
にリージョン情報を追記
const app = new cdk.App(); const stack_region = app.node.tryGetContext("region"); new CdkLambdaUrlTestStack(app, 'CdkLambdaUrlTestStack', { env: { region: stack_region, } });
lambda
ディレクトリを作成し、hello.py
を作成する
CDKのプロジェクト直下にlambda
ディレクトリを作成します。
hello.py
の内容は冒頭のサンプルコードをそのまま流用します。
mkdir lambda && touch lambda/hello.py
lib/cdk-lambda-url-test-stack.ts
にリソースを定義
Lambdaのランタイム設定や関数URLの有効化などを定義します。
デプロイ後に関数URLを知る必要があるのでCfnOutput
で出力します。
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import { CfnOutput } from 'aws-cdk-lib'; export class CdkLambdaUrlTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Lambdaの設定 const hello = new lambda.Function(this, 'HelloHandler', { runtime: lambda.Runtime.PYTHON_3_9, code: lambda.Code.fromAsset('lambda'), handler: 'hello.handler' }); // 関数URLの設定 const fnUrl = hello.addFunctionUrl({ authType: lambda.FunctionUrlAuthType.NONE, cors: { allowedMethods: [lambda.HttpMethod.ALL], allowedOrigins: ["*"], }, }); // 関数URLの出力 new CfnOutput(this, 'FuntionUrl', { value: fnUrl.url }); } }
- cdk Toolkitのデプロイ
cdk bootstrap
- CDKのデプロイ
cdk deploy
動作確認
デプロイ完了時、コンソールに関数URLが出力されます。
実際にアクセスして"Hello from Lambda!"が表示されることを確認します。