How you can speed up
Serverless development
by local
ピクスタ株式会社 星直史
16545027 Photo by Fast&Slow
はじめに
資料は後ほど公開します
撮影OK
(ただし、シャッター音は控えめに)
実況も大歓迎です
#pixta
自己紹介
2018年1月より開発部の部長に就任。
エンジニアの採用、育成、組織作りに取り組んでいる。
星直史
@NaoshiHoshi
ピクスタのご紹介
PIXTAのご紹介
fotowa のご紹介
Snapmart のご紹介
● 現状確認
● テスタビリティをこじあける
アジェンダ
話すこと
話さないこと
● サイズとピラミッドとループ
● そこから先へ
● 何を作ったか(!)
● Golangの書き方や使用感など
今回の開発合宿の目標はココ!
Special thanks
● 現状確認
● テスタビリティをこじあける
アジェンダ
話すこと
話さないこと
● サイズとピラミッドとループ
● そこから先へ
● 何を作ったか(!)
● Golangの書き方や使用感など
● 109行のコード、1つの関数
● 重複コード
● AWS DynamoDB SDKのラッ
パーが使えていない
● テストが存在しない
● ローカルで回せていない
● デプロイに時間がかかる
→ 開発継続に備えて自動テスト
を書いて振る舞いが変わっていな
いことを確かめる環境を整備した
い
● 現状確認
● テスタビリティをこじあける
アジェンダ
話すこと
話さないこと
● サイズとピラミッドとループ
● そこから先へ
● 何を作ったか(!)
● Golangの書き方や使用感など
● DynamoDBの準備
○ Tableの作成
○ 作成したテーブルにデータの追加
● Lambda Functionを準備してデプロイ
○ デプロイパッケージ作成
■ go get -u hogehoge
■ ビルド
■ ZIP圧縮
○ 実行ロール作成
■ IAMロール作成
■ ARNをメモしてLambdaに適用
● 目視でテスト
○ Lambdaのコンソールでテスト用のJSONを作成、実行、コンソールのログを
目視で確認
○ もしくは、AWS CLIでLambda Functionを実行、結果を目視確認
テスト手順書_v1
● DynamoDBの準備
○ Tableの作成
○ 作成したテーブルにデータの追加
● Lambda Functionを準備してデプロイ
○ デプロイパッケージ作成
■ go get -u hogehoge
■ ビルド
■ ZIP圧縮
○ 実行ロール作成
■ IAMロール作成
■ ARNをメモしてLambdaに適用
● 目視でテスト
○ Lambdaのコンソールでテスト用のJSONを作成、実行、コンソールのログを
目視で確認
○ もしくは、AWS CLIでLambda Functionを実行、結果を目視確認
テスト手順書_v1
● DynamoDBの準備
○ Tableの作成
○ 作成したテーブルにデータの追加
● Lambda Functionを準備してデプロイ
○ デプロイパッケージ作成
■ go get -u hogehoge
■ ビルド
■ ZIP圧縮
○ 実行ロール作成
■ IAMロール作成
■ ARNをメモしてLambdaに適用
● 目視でテスト
○ Lambdaのコンソールでテスト用のJSONを作成、実行、コンソールのログを
目視で確認
○ もしくは、AWS CLIでLambda Functionを実行、結果を目視確認
テスト手順書_v1
● ServerlessFramework定義書作成
● Lambda Functionを準備してデプロイ
○ デプロイパッケージ作成
■ go get -u hogehoge
■ ビルド
■ ZIP圧縮
● 目視でテスト
○ Lambdaのコンソールでテスト用のJSONを作成、実行、コンソールのログを
目視で確認
○ もしくは、AWS CLIでLambda Functionを実行、結果を目視確認
テスト手順書_v2
via. Testable Lambda: Working Effectively with Legacy Lambda / Takuto Wada
AWSにデプロイを行うことでフィー
ドバックループに時間がかかる
1. ローカルでテストを行うための
モックを準備
2. 荒い粒度のテストから始める
アプローチ
LocalStack
● Synonym関数内でStage( dev / staging / test / prod)によるエンドポイントの分岐がある
● コードを直接編集しなくても振る舞いを変えたい
→ Synonym関数の一つ前に薄い関数を噛ませることで、
DyanmoDBのClientを外から差し込めるようにしたい
● Synonym関数にDynamoDBのClientを渡す関数を作成
● Synonym関数はDynamoDBのClientを受け取れる様に
修正
→ TestHandlerは対象の関数にDynamoDBのエンドポイ
ントを変えたClientを渡すだけでモックを利用に可能に
勝てそうな気がしてきた
via. Testable Lambda: Working Effectively with Legacy Lambda / Takuto Wada
● ServerlessFrameworkによ
りデプロイの簡略化
● LocalStackのモックを利用
することでデプロイが不要
に
● 粒度の大きいテストでまず
は最低限の動作を担保
フィードバックループにかかる時
間が30分から2秒に
サーバーレスでは、初手で開発生産性が向
上する環境を用意する
1. ローカルテスト環境構築
2. 自動テストによるフィードバックループの
高速化
3. デプロイの簡略化
まとめ
才能をつなぎ、
世界をポジティブにする
We're hiring!
7336449 Photo by Sunny studio

How you can speed up serverless development by local