Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS CDKでLambda Function URLsを設定してみた話/jawsug-cdk-2
Search
Kenichiro Wada
July 13, 2022
Technology
2
760
AWS CDKでLambda Function URLsを設定してみた話/jawsug-cdk-2
2022.07.13 JAWS-UG CDK専門支部 #2登壇資料です。
Kenichiro Wada
July 13, 2022
Tweet
Share
More Decks by Kenichiro Wada
See All by Kenichiro Wada
(全日本人)待望のS3トリガーのLambda無限ループ対応について / chibaraki-1
kwada
0
99
AWS Lambdaに出会って人生が変わった1人の10年間 /awslambda10th
kwada
0
65
GPSデバイスを使った簡易位置案内システムの構築をしてみた話。/jawsfesta2024
kwada
0
590
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
3
270
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
89
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
120
SORACOM UG Explorer 2023ハンズオンの裏側サービスを紹介 / soracom-ug-online-17
kwada
0
240
(2023.08.17 Update)Detecting and stopping recursive loops in AWS Lambda functionsでAWS Lambdaの無限ループを防ぐ! / jaws-ug-shizuoka
kwada
0
230
三国志好きの自分が一番最初に出会った三国志のゲームを令和になってやってみた / retrogstudy-8
kwada
0
130
Other Decks in Technology
See All in Technology
数百台のオンプレミスのサーバーをEKSに移行した話
yukiteraoka
0
640
KCD Brazil '25: Enabling Developers with Dapr & Backstage
salaboy
1
120
パスキー導入の課題と ベストプラクティス、今後の展望
ritou
7
1.2k
チームビルディング「脅威モデリング」ワークショップ
koheiyoshikawa
0
130
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
4.9k
モノリスの認知負荷に立ち向かう、コードの所有者という思想と現実
kzkmaeda
0
110
Cloud Native PG 使ってみて気づいたことと最新機能の紹介 - 第52回PostgreSQLアンカンファレンス
seinoyu
1
180
Cline、めっちゃ便利、お金が飛ぶ💸
iwamot
19
18k
ClineにNext.jsのプロジェクト改善をお願いしてみた / 20250321_reacttokyo_LT
optim
1
1.3k
空が堕ち、大地が割れ、海が涸れた日~もしも愛用しているフレームワークが開発停止したら?~ #phperkaigi 2025
77web
2
1k
日本MySQLユーザ会ができるまで / making MyNA
tmtms
1
350
AWS のポリシー言語 Cedar を活用した高速かつスケーラブルな認可技術の探求 #phperkaigi / PHPerKaigi 2025
ytaka23
7
1.5k
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Gamification - CAS2011
davidbonilla
81
5.2k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.5k
Unsuck your backbone
ammeep
670
57k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Being A Developer After 40
akosma
90
590k
Statistics for Hackers
jakevdp
798
220k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
It's Worth the Effort
3n
184
28k
GraphQLとの向き合い方2022年版
quramy
45
14k
Building Your Own Lightsaber
phodgson
104
6.3k
Transcript
AWS CDKでLambda Function URLs を設定してみた話 BXT KBXTVH KBXTVH@DEL 2022.07.13 JAWS-UG
CDK⽀部 #2 和⽥健⼀郎@Keni_W
ࠓ͢͜ͱ KBXTVHDIJCB KBXTVH@DEL • ⾃⼰紹介 • Lambda Function Urlsとは •
私とAWS CDK • まずはL1 • 次はL2 • ハンズオン作ったよ • やらかし事案紹介 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
⾃⼰紹介 ⽒名:和⽥ 健⼀郎 所属:アイレット株式会社 エンジニア JAWS-UG 千葉 運営メンバー SORACOM UG東京
運営メンバー Twitter: @Keni_W Facebook : kenichiro.wada.3 好きなAWSサービス : AWS Lambda 2020年共著でサーバーレスの本書きました 普段は社内開発で社内のシステム担当
ࢲͱ$%, KBXTVHDIJCB KBXTVH@DEL • 使い始めたのは、昨年10⽉ぐらい(v1)。 • 構築中にどんどんバージョンアップされてた ので、エラーになってウゲーってなってた⼈。 • CloudFormationのテンプレート、CDKのお
かげで⼀⽣⼿で書くことはないなと思ってる ⼈。 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
-BNCEB'VODUJPOT6SMTͱ KBXTVHDIJCB KBXTVH@DEL • 2022年4⽉に登場したAWS Lambda関数に 外部エンドポイントを⽣やせるようになっ たもの。 • Lambda単体でAPIエンドポイントを作れ
るということで、API Gatewayと似て⾮な るものですが、使い分けを確認のこと。 • 注意はVPC Lambdaにもサクッと設定でき ること。 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
·ͣ- KBXTVHDIJCB KBXTVH@DEL • 直前にAWS CDK Conferenceがあったの でCDKでチャレンジ。 • 登場当初はL2
Construct 対応されてな かった。 • プルリクはあったけど未マージ。 • 海外の⽅がSample作ってたのでそれを参 考にして作ってみた。 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
·ͣ- KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ /** * Lambda Url * Referenced
https://github.com/neilkuan/cdk-lambda-url-sample * See https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-url.html */ new CfnResource(this, 'lambdaFunctionUrlsL1Permision', { type: 'AWS::Lambda::Permission’, properties: { FunctionName: lambdaFunctionUrlsL1.functionName, Principal: '*’, Action: 'lambda:InvokeFunctionUrl’, FunctionUrlAuthType: 'NONE’ } }); const lambdaFunctionUrlsL1Cfn = new CfnResource(this, 'LambdaFunctionUrlsL1Cfn' , { type: 'AWS::Lambda::Url’, properties: { TargetFunctionArn: lambdaFunctionUrlsL1.functionArn, AuthType: 'NONE’ } }); new CfnOutput(this, 'TheLambdaUrlFunctionL1', { value: lambdaFunctionUrlsL1Cfn.getAtt('FunctionUrl').toString(), });
࣍- KBXTVHDIJCB KBXTVH@DEL • 2022/04/22にL2 Constract対応が盛り込 まれたv2.21.0がリリースされました。 • なので、早速試してみる •
L2対応すると⼤分コード削減されました。 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
࣍- KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ // L2 Constract const lambdaFunctionUrlsL2 =
new lambda.Function(this, 'LambdaFunctionUrlsL2', { runtime: lambda.Runtime.NODEJS_14_X, code: lambda.Code.fromAsset('lambda'), // code loaded from "lambda" directory handler: 'index.handler’, timeout: Duration.seconds(10), }); const lambdaFunctionUrlsL2Url = new lambda.FunctionUrl(this,'LambdaFunctionUrlsL2Url', { function: lambdaFunctionUrlsL2, authType: lambda.FunctionUrlAuthType.NONE }); new CfnOutput(this, 'TheLambdaFunctionUrlsL2Url', { value: lambdaFunctionUrlsL2Url.url, });
࣍- KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ /** * Lambda Url * Referenced
https://github.com/neilkuan/cdk-lambda-url-sample * See https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-url.html */ new CfnResource(this, 'lambdaFunctionUrlsL1Permision', { type: 'AWS::Lambda::Permission’, properties: { FunctionName: lambdaFunctionUrlsL1.functionName, Principal: '*’, Action: 'lambda:InvokeFunctionUrl’, FunctionUrlAuthType: 'NONE’ } }); const lambdaFunctionUrlsL1Cfn = new CfnResource(this, 'LambdaFunctionUrlsL1Cfn' , { type: 'AWS::Lambda::Url’, properties: { TargetFunctionArn: lambdaFunctionUrlsL1.functionArn, AuthType: 'NONE’ } }); new CfnOutput(this, 'TheLambdaUrlFunctionL1', { value: lambdaFunctionUrlsL1Cfn.getAtt('FunctionUrl').toString(), });
࣍- KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ // L2 Constract const lambdaFunctionUrlsL2 =
new lambda.Function(this, 'LambdaFunctionUrlsL2', { runtime: lambda.Runtime.NODEJS_14_X, code: lambda.Code.fromAsset('lambda'), // code loaded from "lambda" directory handler: 'index.handler’, timeout: Duration.seconds(10), }); const lambdaFunctionUrlsL2Url = new lambda.FunctionUrl(this,'LambdaFunctionUrlsL2Url', { function: lambdaFunctionUrlsL2, authType: lambda.FunctionUrlAuthType.NONE }); new CfnOutput(this, 'TheLambdaFunctionUrlsL2Url', { value: lambdaFunctionUrlsL2Url.url, });
࣍- KBXTVHDIJCB KBXTVH@DEL • 権限周りを宜しく作ってくれるのが楽。 • API Gatewayと違って、標準ではアウト プットしてくれないので、CfnOutputは必 須。
• L1でも使えることに気づいて、例ではL1 にも⼊ってる。 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
࣍- KBXTVHDIJCB KBXTVH@DEL • API Gatewayと⽐較とかもしたのですが、 その辺は以下の記事をご覧いただければ と・・・。 https://zenn.dev/keni_w/articles/80ff147f0e57f6 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
ϋϯζΦϯ࡞ͬͨΑ KBXTVHDIJCB KBXTVH@DEL • L1作ってアウトプットした後、 AWSJ⻲⽥さんの勉強会で 「特別編 Lambda Function URLs」があ
り、LT応募したら、紆余曲折を経て、ハン ズオンコンテンツ作ることになりました。 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
ϋϯζΦϯ࡞ͬͨΑ KBXTVHDIJCB KBXTVH@DEL • ハンズオンの流れは以下 • L1 Constructで作る • この時点でL2出てたけども
• L2 Constructで作る • DynamoDB配置してAPI的にもした • VPC LambdaにFunction Urls設定して みる "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
ϋϯζΦϯ࡞ͬͨΑ KBXTVHDIJCB KBXTVH@DEL • 今も公開中なので、興味がある⽅はぜひ。 https://github.com/Kenichiro-Wada/aws-lambda-functions-urls-for-aws-cdk "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
ϋϯζΦϯ࡞ͬͨΑ KBXTVHDIJCB KBXTVH@DEL 予告 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
ϋϯζΦϯ࡞ͬͨΑ KBXTVHDIJCB KBXTVH@DEL 近⽇アップデート予定 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
ϋϯζΦϯ࡞ͬͨΑ KBXTVHDIJCB KBXTVH@DEL • AWS Serverless Heroでもある吉⽥真吾さ んが builders.flashに同様の投稿されてい て、こちらの⽅が解説込みで書かれている
ので、おすすめだったりします。 https://aws.amazon.com/jp/builders-flash/202206/operate-lambda-function-request-data "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL • VPC作成には気をつけよう • リソースの削除のデフォルトはちゃんとみ ましょう "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL • VPC作成はこれだけでできます。 • ただし、これだけだと、以下を作ってくれ ます。 (ap-northeast-1) •
PrivateなSubnet x 2 • PublicなSubnet x2 • NAT Gateway x2 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ // VPC const lambdaUrlVpc = new ec2.Vpc(this, 'lambdaUrlVpc‘, { cidr : '10.0.0.0/16', });
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL NAT Gateway x2 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ そして、消し忘れた結果こうなりました。 • みなさんはVPC⼿抜きをせずに、ちゃんと 設計して作りましょうね。
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL • ハンズオンの⽇のツイートなどを眺めてみ ると、こんなコメントが・・・。 "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL DynamoDB 削除されない??? "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ デフォルトでは 消してくれないんかい・・・。 https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html#removalpolicy
Β͔͠ࣄҊհ KBXTVHDIJCB KBXTVH@DEL • ドキュメントはちゃんと読みましょう。 • ちなみに、他だとこんな感じ。 • S3 :
「The bucket will be orphaned」 • RDS : Snapshot • DocumentDB : Retain "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ const songsTable = new dynamodb.Table(this, 'SongsTable', { partitionKey: { name: keyName, type: dynamodb.AttributeType.STRING, }, billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, removalPolicy: RemovalPolicy.DESTROY });
ऴΘΓ KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ • Lambda Function Urls コンソールでも簡 単だけど、CDKでもL2なら結構簡単。
• 簡単に作って、壊せるけど、削除されない ものもあるし、何が作られるかは、cdk diffでちゃんと確認すること。 • Stackの分け⽅とかまだまだ雰囲気でやっ てるので、さらに勉強したいと思ってる。
ऴΘΓ KBXTVHDIJCB KBXTVH@DEL "84$%,Ͱ-BNCEB'VODUJPO63-TΛઃఆͯ͠Έͨ ご静聴 ありがとう ございました