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
850
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
JAWS-UGとLambdaに感謝を込めて~ AWS と共に歩んだX年 ~/kmj-20260117
kwada
1
56
My First Impression Of Kiro / 20250801-kumoben-lt
kwada
0
96
(全日本人)待望のS3トリガーのLambda無限ループ対応について / chibaraki-1
kwada
0
170
AWS Lambdaに出会って人生が変わった1人の10年間 /awslambda10th
kwada
0
120
GPSデバイスを使った簡易位置案内システムの構築をしてみた話。/jawsfesta2024
kwada
0
970
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
3
350
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
150
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
160
SORACOM UG Explorer 2023ハンズオンの裏側サービスを紹介 / soracom-ug-online-17
kwada
0
360
Other Decks in Technology
See All in Technology
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
340
入社1ヶ月でデータパイプライン講座を作った話
waiwai2111
1
250
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
180
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
410
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
1
360
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
220
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.6k
Stately
mu7889yoon
1
110
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
200
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
130
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
880
使いにくいの壁を突破する
sansantech
PRO
1
120
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
210
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
How to train your dragon (web standard)
notwaldorf
97
6.5k
A Modern Web Designer's Workflow
chriscoyier
698
190k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
Navigating Team Friction
lara
192
16k
Visualization
eitanlees
150
17k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
48
Un-Boring Meetings
codingconduct
0
200
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
97
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Λઃఆͯ͠Έͨ ご静聴 ありがとう ございました