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
690
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
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
1
200
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
21
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
54
SORACOM UG Explorer 2023ハンズオンの裏側サービスを紹介 / soracom-ug-online-17
kwada
0
140
(2023.08.17 Update)Detecting and stopping recursive loops in AWS Lambda functionsでAWS Lambdaの無限ループを防ぐ! / jaws-ug-shizuoka
kwada
0
180
三国志好きの自分が一番最初に出会った三国志のゲームを令和になってやってみた / retrogstudy-8
kwada
0
79
意外と使われている3レターコードの話 / 20230715_katsuura
kwada
0
87
Press, Connect, Innovate: Exploring SORACOM IoT Button's Endless Possibilities / soracom-discovery-night-event-lt-jpn
kwada
0
120
Press, Connect, Innovate: Exploring SORACOM IoT Button's Endless Possibilities / soracom-discovery-night-event-lt
kwada
0
63
Other Decks in Technology
See All in Technology
学術機関におけるID連携とOpenID Connect
fujie
0
230
忙しい人のためのLangGraph概要まとめ
__ymgc__
1
190
可視化により内部品質をあげるAIドキュメントリバース/20240910 Hiromitsu Akiba
shift_evolve
0
220
Functional TypeScript
naoya
11
4.8k
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
cygames
0
180
Mocking in Rust Applications
taiki45
1
410
watsonx.ai Dojo 環境準備について
oniak3ibm
PRO
0
300
持続可能なソフトウェア開発を支える『GitHub CI/CD実践ガイド』
tmknom
6
1.4k
不動産売買取引におけるAIの可能性とプロダクトでのAI活用
zabio3
0
270
JTCや セキュリティチェックリストが夢の跡
nikinusu
0
620
2024年のナビゲーション・フォーカス対応:Composeでキーボード・ナビゲーションをサポートしよう
tahia910
0
110
株式会社EventHub・エンジニア採用資料
eventhub
0
2.9k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
0
120
Documentation Writing (for coders)
carmenintech
65
4.3k
Debugging Ruby Performance
tmm1
72
12k
Writing Fast Ruby
sferik
623
60k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
24
610
Why Our Code Smells
bkeepers
PRO
334
56k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.6k
Testing 201, or: Great Expectations
jmmastey
36
7k
Rebuilding a faster, lazier Slack
samanthasiow
78
8.6k
How to Think Like a Performance Engineer
csswizardry
16
960
Unsuck your backbone
ammeep
667
57k
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Λઃఆͯ͠Έͨ ご静聴 ありがとう ございました