はじめに
大好きなAWS芸人の清水さんのセッションレポートです。 Kinesisでフリーザを撃て!のネタが大好きです。
www.slideshare.net
登壇者
AWSソリューションアーキテクト 清水崇之氏(@shimy_net)
おさらい
サーバレスとは
- サーバ管理が不要
- アイドル時のリソース確保が不要
- 柔軟なScaling
- 組み込まれた高可用性
ビルディングブロック
- Lambda
- コードを動かすもの
- サーバレスの核
- Lambdaだけではサービスはできない
構成図
- 従来なら
- ELB
- EC2
- RDS
- サーバレスなら
- API Gateway
- WAF
- CloudWatch(監視)
- X-Ray(モニタリング)
- Cognito(認証)
- Lambda
- DynamoDB
- API Gateway
開発テスト、フレームワーク
開発環境
- Cloud9
- PyCharm
- VS Code
- SDKを提供
サービスが増えていく
- どこに何があるかわからない
- モノリシックと同じ悩みになってくる
AWS SAM(Serverless Application Model)
- 標準的なモデル
- SAMでPackage&Deploy
- CloudFormationの拡張
- SAMテンプレート
yml
- SAMテンプレート
- CloudFormationの拡張
SAM表記方法
- 基本的にCloudFormationっぽいymlを書く
- https://github.com/awslabs にSAMのサンプルがある
- Lambda
- だいたいCloudFormationと同じ
- API Gateway
- Lambdaに属性を追加する
- DyamoDB
Type: AWS::Serverless::simpleTable
- Lambda
Express.jsのサンプルを動かす
$ npm deploy
SAM CLI
$ sam init --runtime nodejs8.10
- サンプルアプリの作成
- 関数ペイロード(S3イベントなど)を生成
- Lambda関数をローカルで実行
$ sam local invoke hogeFunction -e S3event.json
複数環境、CICD
開発・テスト・実行には複数環境が必要
- ユーザに影響を与えない
- インフラの変更を安全にテストしたい
- 方法
- AWSアカウントを分ける
- 環境変数を利用
- SAM
- インフラをコードとして利用
- CI/CDを使う
アカウント戦略
- 同じアカウントでスタックを分ける
- リソース管理が簡単
- 許可・アクセスの分離が難しい
- 小規模チームや個人向き
- アカウントを分ける
- 許可やアクセスを確実に分離できる
- 複数アカウントとそれらの間のコントロールが難しい
- 大規模チームや企業に向いている
- AWS Organizationでちょっと楽になるかも
環境変数
- Lambda関数に動的に渡せるキーと値のペア
- KMS経由で暗号化できる
- ステージごとに環境を作成するために利用すると便利
バージョニング・エイリアス
- Lambda
- エイリアスは特定バージョンに関するポインタ
- API Gateway
- ステージ
- 環境変数のように利用できる
1つのテンプレートから複数の環境を構築する
Codeサービスと組み合わせてCI/CD
- パイプラインの例
- CodeCommitにプッシュ
- CodePiplineが検知
- CodeBuildがビルド
- 成果物をS3に配置
- SAM/CloudFormationがデプロイ
- 成果物をS3に配置
- CodeBuildがビルド
- CodePiplineが検知
- CodeCommitにプッシュ
段階的なデプロイメント
- Gradual Deployment
- Sam
DeploymentPreference
を設定できる
Alarm、フック
- SAM
Alarm
でカスタムメトリクス名を参照できるhook
で呼び出すLambda関数を指定できる
再利用
- SAMやCloudFormationとして利用する
- Serverless Application Repository経由で再利用する(SAR)
監視、モニタリング
メトリクスとログ
- サードパーティのツールを利用するのもあり
- X-Ray
- request実行状況の確認
- 様々なアプリに最適
デザインパターン
- インタラクティブモバイル
- 業務系API
- 画像処理(シンプルなデータ加工)
- 画像のリサイズをLambdaで行う
- 流入データの連続処理
- Kinesisでバッファリングして、Lambdaでポーリング
- データ変更トリガー
- DynamoDBStreamsからLambdaを呼ぶ
- 機械学習ETL
- データレイクからのデータ加工
まとめ
内容が非常に盛りだくさんなセッションでした!実は昨年も清水さんのセッションを聞きました。AWS SAMなどのお話を伺いましたが、去年はCloudFormationを使ったことがなかったため、イマイチ理解できませんでした。今はほぼすべてのインフラをCloudFormationで構築しているため、SAMのお話は理解しやすかったです。
CloudFormationとは微妙に記述の仕方が違うようなので、サーバレスでアプリを作る際にはSAMを使ってみたいと思います!