紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【レポート】A3-05 めざせ!サーバレスプロフェッショナルを聞いてきました #awssummit

f:id:yokoyantech:20190614165438p:plain

はじめに

大好きなAWS芸人の清水さんのセッションレポートです。 Kinesisでフリーザを撃て!のネタが大好きです。

www.slideshare.net

登壇者

AWSソリューションアーキテクト 清水崇之氏(@shimy_net)

おさらい

サーバレスとは

  • サーバ管理が不要
  • アイドル時のリソース確保が不要
  • 柔軟なScaling
  • 組み込まれた高可用性

ビルディングブロック

  • Lambda
    • コードを動かすもの
    • サーバレスの核
      • Lambdaだけではサービスはできない

構成図

  • 従来なら
    • ELB
    • EC2
    • RDS
  • サーバレスなら
    • API Gateway
      • WAF
      • CloudWatch(監視)
      • X-Ray(モニタリング)
    • Cognito(認証)
    • Lambda
    • DynamoDB

開発テスト、フレームワーク

開発環境

  • Cloud9
  • PyCharm
  • VS Code
    • SDKを提供

サービスが増えていく

  • どこに何があるかわからない
    • モノリシックと同じ悩みになってくる

AWS SAM(Serverless Application Model)

  • 標準的なモデル
  • SAMでPackage&Deploy
    • CloudFormationの拡張
      • SAMテンプレートyml

SAM表記方法

  • 基本的にCloudFormationっぽいymlを書く
  • https://github.com/awslabs にSAMのサンプルがある
    • Lambda
      • だいたいCloudFormationと同じ
    • API Gateway
      • Lambdaに属性を追加する
    • DyamoDB
      • Type: AWS::Serverless::simpleTable

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がデプロイ

段階的なデプロイメント

  • 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を使ってみたいと思います!