Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AWS サーバレス設計 Tips集
Search
Atsushi Satou
May 15, 2024
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS サーバレス設計 Tips集
Atsushi Satou
May 15, 2024
More Decks by Atsushi Satou
See All by Atsushi Satou
AWS ECSでサービス間通信についておさらい
atsuw0
1
160
図で理解するAWS Network Firewallのアーキテクチャ
atsuw0
0
530
CLIで構築した方が良いもの一覧.pdf
atsuw0
0
200
HCP Terraformを使ったら AWSやGCPの環境構築が捗った話
atsuw0
0
360
HashicorpCloudについて.pdf
atsuw0
0
40
HCP Terraform について
atsuw0
0
1.9k
HashicorpCloudについて.pdf
atsuw0
0
45
AWS re:Invent 2023 ストレージ EFSレプリケーションのフェイルバック機能を試してみた
atsuw0
0
450
AWS re:Invent 2023 個人的に興味深いもの集
atsuw0
0
140
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
RailsConf 2023
tenderlove
30
1.6k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
Site-Speed That Sticks
csswizardry
13
1.5k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
730
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
A better future with KSS
kneath
240
18k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Building an army of robots
kneath
307
47k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Transcript
AWS サーバレス設計 Tips集 佐藤 淳 Serverless LT初心者向け LT大会 #45 https://serverlesslt.connpass.com/event/316406/
自己紹介 名前: 佐藤 淳 ( Atsushi Sato ) 会社: 某AWSが得意な会社
Qiita: https://qiita.com/atw0_0w 職業: インフラエンジニア 最近興味あること: golangでCLIツールの作成
今日話す内容 AWS 上でサーバレスアーキテクチャを構成してみて個人的に事前に検討し たほうが良いと思ったTips集になります。 ※ ブログで寄稿した内容メインで話します。 AWS クラウドサービス: AWS 対象サービス:
Lambda、 API Gateway
本日お話するAWS アーキテクチャ API Gateway + Lambda のシンプルな構成
Tips1 API Gateway
API を バージョンごとに公開 各バージョンでAPIを公開 [Tips 1] API Gateway + Lambda
APIバージョン管理
[Tips 1] API Gateway + Lambda APIバージョン管理 API Gateway …
${stageVariables.変数名} を使用してステージ変 数で設定した値のLambdaエイリアスにリクエスト https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/aws-api-gateway-stage-variables-reference.html
[Tips 1] API Gateway + Lambda APIバージョン管理 Lambda … API
Gatewayのステージ変数と同じLambdaエイリアス 名を指定
[Tips 1] API Gateway + Lambda APIバージョン管理 ユースケース: - バージョンごとにAPIを公開したい場合
詳しくは以下のリンクを参照 元ネタ: https://qiita.com/atw0_0w/items/c8b27cd4895fc6be9e98
Tips2 Lambda 検証
ローカルでLamdbaを試したいなら 「https://gallery.ecr.aws/lambda 」 からイメージを取得し、コンテナを実行 例) Lambda で Python を使用したい場合 https://gallery.ecr.aws/lambda/python
[Tips 2] ローカルでLambdaのベースコンテナを試してみたい
[Tips 2] ローカルでLambdaのベースコンテナを試してみたい
[Tips 2] ローカルでLambdaのベースコンテナを試してみたい ユースケース - ローカル上での動作確認 - Lambdaコンテナでカスタムイメージを利用したい場合 - デプロイ後の「invalid
ELF header」エラーの回避 > ローカル端末でのpythonとAWS Lambda 上でのpythonライブラリではOS自体が異なることでELF ヘッダー情報が異なることで 発生するエラー 詳しくは以下のリンクを参照 元ネタ: https://qiita.com/atw0_0w/items/2362dced7e8987210698
Tips3 Lambda Layer
複数のLambdaで呼び出されるケース [Tips 3] Lambda Layerを試す
[Tips 3] Lambda Layerを試す ユースケース - 複数の関数で共通で実行するコード - 外部パッケージを利用する場合 詳しくは以下のリンクを参照
元ネタ: https://qiita.com/atw0_0w/items/5fbb1ce89454baead818 https://qiita.com/atw0_0w/items/2362dced7e8987210698
[Tips 3] Lambda Layerを試す [補足] 外部パッケージを利用している場合の注意点 サーバーワークスさんの記事で興味深い記事を紹介。 > https://blog.serverworks.co.jp/lambda-function-stopped-working-suddenly 要約するとboto3
や botocore などと依存関係を持つライブラリでバージョン互換性に よるエラーが発生する事象。 → Lambdaのランタイムはデフォルトでランタイムバージョンは常に更新され、それに伴い各ライブラリのバージョンも更新される。 → 全く更新がないパッケージの利用やLayerだけ塩漬け対応していると依存関係のエラー発生するかも。。 ランタイムを手動更新する設定をすれば少なくともエラーは回避。
[Tips 3] Lambda Layerを試す ランタイムを手動更新する設定をすれば少なくともエラーは回避。
Tips4 Infrastructure as Code
[Tips 4] Infrastructure as Code IaCで作る際、どの方式が良いか? Cloudformation(Terraform) or AWS Serverless
Application Model ? > ポイント: LambdaアプリケーションはCI/CDで問題ないが、リソースなどの設定は抽象度が低い方がいいか or 高い方がいいか
[Tips 4] Infrastructure as Code AWS Serverless Application Modelを利用する場合 抽象度の高い
AWS Serverless Application Model(以下SAM) で作成した方がコード の記述量は少なくシンプルに作成することは可能。しかし、以下の場合のような[Tips1] のようなケースであるなら控えた方が良いかも。。。 - Lambdaバージョンの明示的指定 - 複数ステージ・複数エイリアスの管理 → SAMでは複数のエイリアス, バージョン管理は難しい 元ネタ: https://qiita.com/atw0_0w/items/7d5cc6abd59f0f62a6bd https://qiita.com/atw0_0w/items/1fd41907e54db0f1aef7
[Tips 4] Infrastructure as Code Cloudformation(Terraform) を利用する場合 抽象度が低いため AWS SAM
での課題は解消できる。 - Lambdaバージョンの明示的指定 - 複数ステージ・複数エイリアスの管理 しかし、パラメータの記載量が多くなり、管理が大変。 そもそもSAMもCloudformation(Cfn)も前のLambdaバージョンにロールバックできな い。。 → Lambrollを使って更新すればロールバックもできるし、簡単にデプロイできる(個人 的おすすめ⭐) https://github.com/fujiwara/lambroll
まとめ
- API Gateway にて複数のステージを使用する場合、「${stageVariables.変数名}」 でAPI GatewayステージとLambdaエイリアスを関連づける。 - ローカルでのLambda関数の検証なら「https://gallery.ecr.aws/lambda 」を 参照。
- 複数の関数で利用するのなら、Lambda Layerを使用する。 但しパッケージの依存関係には要注意。 - 要件を洗い出して適切なIaCツールを選択する。 まとめ
ご清聴ありがとうございました