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
790
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
120
AWS Lambdaに出会って人生が変わった1人の10年間 /awslambda10th
kwada
0
84
GPSデバイスを使った簡易位置案内システムの構築をしてみた話。/jawsfesta2024
kwada
0
700
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
3
300
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
110
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
130
SORACOM UG Explorer 2023ハンズオンの裏側サービスを紹介 / soracom-ug-online-17
kwada
0
300
(2023.08.17 Update)Detecting and stopping recursive loops in AWS Lambda functionsでAWS Lambdaの無限ループを防ぐ! / jaws-ug-shizuoka
kwada
0
240
三国志好きの自分が一番最初に出会った三国志のゲームを令和になってやってみた / retrogstudy-8
kwada
0
150
Other Decks in Technology
See All in Technology
生成AI時代 文字コードを学ぶ意義を見出せるか?
hrsued
1
670
LangSmith×Webhook連携で実現するプロンプトドリブンCI/CD
sergicalsix
1
130
標準技術と独自システムで作る「つらくない」SaaS アカウント管理 / Effortless SaaS Account Management with Standard Technologies & Custom Systems
yuyatakeyama
3
1.3k
Delegating the chores of authenticating users to Keycloak
ahus1
0
130
20250625 Snowflake Summit 2025活用事例 レポート / Nowcast Snowflake Summit 2025 Case Study Report
kkuv
1
340
Oracle Cloud Infrastructure:2025年6月度サービス・アップデート
oracle4engineer
PRO
2
300
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
3
230
Tokyo_reInforce_2025_recap_iam_access_analyzer
hiashisan
0
120
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
4
820
SalesforceArchitectGroupOsaka#20_CNX'25_Report
atomica7sei
0
250
Lambda Web Adapterについて自分なりに理解してみた
smt7174
5
130
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
5
550
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
94
6.1k
Why Our Code Smells
bkeepers
PRO
337
57k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Typedesign – Prime Four
hannesfritz
42
2.7k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Done Done
chrislema
184
16k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
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Λઃఆͯ͠Έͨ ご静聴 ありがとう ございました