サーバレス勉強会のノート
コーポレートエンジニアから見た Serverless
ServerlessでETL
Extract/Transform/Load(抽出したデータを変換/加工した上でデータウェアハウス等へ渡す処理)
背景
- アクセスログをBIツール内で加工して保存を行なっていたが膨大すぎる
目的
- 的確な量に正規化したい
Aws Athena
- S3を標準SQLで分析
Glue Crawler
- クローラを使用して、AWS Glue データカタログ にテーブルを入力
Step Funtionの活用
- 複数のLambdaの起動を管理
- Lambdaは実行時間で課金する
- Step Funtionはワークフローの時間で課金するので、待ちをもたせてトータルコストを下げる
Bucket Pollicyがハマりポイント
- Cloud FormationとCloudBuildでGtHubko-dokanriga kanou
- DatadocやCloudWatcherで監視
サーバーレスで実現する Webアプリケーション高速開発
実績
- ECサイト1200超え
プロダクト紹介
- Visumoの話を今回する
サーバレス導入の背景
Visumoとは
- インスタのビジュアルを取り扱うマーケティングサービス
- インスタグラムの投稿を検索してビジュアルを分析
- 簡単動画コンテンツ作成サービスを追加した(ビデオメーカ機能)
- 画像を選択してテキストを入れるだけで動作が作れる
動画を扱う背景
- Webコンテンツは動画が肝になる。それを早く提供したい
- 疎結合で早く開発できるサーバレスで実現
導入の話
サーバレス導入の背景
ビデオメーカーの構成説明
- FrontはReactとS3とCloudFront
- Backend APIは QraphQL
- DBはAurora ←後で説明
Faas構成
- API Gateway + Lambda + Aurora
- なぜDynamoDBじゃないか
- Lambdaがスケールした際にAuroraだと、DB接続数が限界になるんでは
- 性能評価をし、Auroraでいけると判断
- ただし対策としてRDS ProxyでDB接続数を管理した
よかったこと
- ものつくりに集中。効率化。学習コストが低い
- サーバ管理から解放される
- サーバ構築、セキュリティ、サイジング、可能性の担保を考慮しなくて良い
サーバレスのデザインパターン
- ユースケースに合わせたパターンを用いる
- 形で考えるサーバレス設計参照
- https://aws.amazon.com/jp/serverless/patterns/serverless-pattern/
GraphQLによる効率化
- フロントとやりとりするデータをAPIドキュメントとしてパッケージング
高速化の実現
- サーバの導入時間がない
- CI/CDで常に最新のコードをデプロイ
- PDCAの高速化
運用コストと学習コストが低い
- 運用コストはほとんどがAurora
- Reactの勉強だけでFrontはできた(アーキは多いけど)
- サーバサイドはGraphQLとAPIの言語だけ
注意点
- 高トラフィックに弱い
- 応答が遅くなる時がある
- Lambdaの実行は最大15分
- 長時間かかるバッチはさけるか、StepFunctionを用いる
ハマりポイント
- Lambdaのメモリを小さくしすぎない(デフォルトメモリが128MBしかない)
- イベントが二回実行されることがある(Lambdaイベントがまれに二回)
- 同じ結果になるようにプログラムで制御
マネージドサービス
- やっていないとわからない
- すぐにPDCAを回すべき
まとめ
- サーバレスは楽しい
- アプリの価値を話しあう時間を作ることができる
Cloud agnostic Serverless build with git lab
概要
AwsLambda
- 出てから5年たって重複した登壇が増えてきた
Multi Cloud
- ベンダーへのロックインを避けたい
- オンプレ時代からある文化
CNCF Cloud Native Interactive Landscape
- スライドがALL英語だ!
- https://landscape.cncf.io/
- 抽象化した構成
GitLabServerlessの紹介
- offerings
- Function deply (triggerMesh, OpenFaas
- Container( k8s…) deploy
- Lambda
- Ci pipeline workflow of function
- データ処理ワークフロー用の CI / CD パイプラインを設定
- Lamdaでいままで動かしている人にとってはポータビリティ性がさがるかも
- そのためにTriggerMesh側で提供しているKnativeLambdaRuntimeでを使う
Progress delivery
- 1年くらい前から出てきた
- いままでのContinuousDelivery時に自動ロールバック
- Obserbilityがよい←よくわからない
まとめ
- クラウド非依存サーバレスへ挑戦
- DevOps adoptionツールの改善ループをまわす