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
770
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
110
AWS Lambdaに出会って人生が変わった1人の10年間 /awslambda10th
kwada
0
71
GPSデバイスを使った簡易位置案内システムの構築をしてみた話。/jawsfesta2024
kwada
0
640
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
3
270
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
96
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
120
SORACOM UG Explorer 2023ハンズオンの裏側サービスを紹介 / soracom-ug-online-17
kwada
0
270
(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
140
Other Decks in Technology
See All in Technology
ガバクラのAWS長期継続割引 ~次の4/1に慌てないために~
hamijay_cloud
1
590
Notion x ポストモーテムで広げる組織の学び / Notion x Postmortem
isaoshimizu
1
150
OPENLOGI Company Profile
hr01
0
63k
LINE 購物幕後推手
line_developers_tw
PRO
0
370
コードや知識を組み込む / Incorporating Codes and Knowledge
ks91
PRO
0
170
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
990
250510 StepFunctionのテスト自動化始めました vol.1
east_takumi
1
150
続・やっぱり余白が大切だった話
kakehashi
PRO
2
250
AIとSREで「今」できること
honmarkhunt
3
710
AOAI で AI アプリを開発する時にまず考えたいこと
mappie_kochi
1
440
Databricksで完全履修!オールインワンレイクハウスは実在した!
akuwano
0
150
本当に必要なのは「QAという技術」だった!試行錯誤から生まれた、品質とデリバリーの両取りアプローチ / Turns Out, "QA as a Discipline" Was the Key!
ar_tama
9
2.8k
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
Side Projects
sachag
453
42k
Music & Morning Musume
bryan
47
6.5k
Thoughts on Productivity
jonyablonski
69
4.6k
The Cult of Friendly URLs
andyhume
78
6.3k
Site-Speed That Sticks
csswizardry
6
530
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Building Adaptive Systems
keathley
41
2.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.2k
It's Worth the Effort
3n
184
28k
BBQ
matthewcrist
88
9.6k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
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Λઃఆͯ͠Έͨ ご静聴 ありがとう ございました