LoginSignup
2
3

More than 3 years have passed since last update.

AWS Chaliceのオンラインセミナー受けてみた

Last updated at Posted at 2019-06-19

AWS Black Belt Online Seminar Dive Deep into AWS Chalice」の自分向けメモ
AWS Chaliceって何?......レベルの人向け

Chaliceとは

  • Python製OSSサーバーレスアプリケーションフレームワーク
  • API GatewayとLambdaを使用するアプリケーションを迅速に作成、デプロイすることが可能

使い方

スケルトンプロジェクトを作成

  • chaliceをインストールする
  • プロジェクトのひな型を作成
    • .chalice:設定ファイルを配置
    • requirements.txt:依存ライブラリを記述
    • app.py:処理を記載

アプリケーション

  • Chalicelibraryをインポート
  • 起点となるアプリケーションオブジェクト生成
  • ルートデコレータ:@app.route('/')でエンドポイントを設定
    • デコレータへ渡した情報が呼び出し元のAPI Gatewayに渡される
  • returnでレスポンスボディを返却する

デプロイ

コマンドを実行すると以下が自動実行される

  • デプロイパッケージ作成
  • IAMロールを設定
  • Lambadaをデプロイ
  • API Gateway作成

構成

  • app.pyのコードはそのままLambadaコードになる
  • デコレータのAPI Gatewayがトリガーとして設定される
  • デコレータの設定が反映されてAPI Gatewayが作成される
  • IAMポリシーの自動生成
    • LambdaとCloudWatch Logsがデフォルトで付与されている
    • 仮にDynamoDBを記述した場合はポリシーにDynamoDBの操作権限が付与される
    • boto3.resource()は非対応
    • サードパーティの定義も非対応
    • 現状では試験的な機能

まとめ

  • シンプルな実装でAPI Gateway + LambdaのAPIを定義可能
  • 2つの関連性を別途管理する必要がなくなる

基本機能

リクエストハンドリング

URL Parameters

  • 可変的なURLパスを定義可能
  • パスによって、引数で処理分岐

HTTP Methods

  • HTTPメソッドを明示してエンドポイントを定義可能
  • メソッドごとに異なる関数を同一URLパスで定義可能
  • 1つのURLに複数のメソッドを定義できない

Request Metadata

  • app.current_request.~に文字列として、データが入っている
    • ~.method
      • HTTPメソッドを取得
    • ~.headers
      • HTTPヘッダーを取得
      • dict互換
      • 独自拡張クラスで大文字小文字区別なしにアクセス可能
      • リードオンリー
    • ~.query_params
      • クエリストリングを取得
      • dictとして格納
      • 同じキー名の場合は、後勝ち
    • ~.uri_params
      • urlパスを取得
      • dictとして格納
      • 仮引数と同じ値
    • ~.raw_body
      • リクエストボディを取得
      • byte型で格納
    • ~.json_body
      • リクエストボディをJSON形式で取得
      • JSON型文字列で格納

レスポンスハンドリング

Custom HTTP Response

  • 暗黙的には200 OKで返却
  • Response()で定義した内容でレスポンスを返却できる
  • エラーを返却することも可能
    • 任意のメッセージを生成できる

Error HTTP Response

  • 任意のエラーを返す例外クラスをraiseする

他機能

認証認可

  • IAM、Cognitoと容易に連携
  • 独自認証実装とも連携可能
  • CORSサポート
  • GZIP圧縮によるレスポンス可能
  • Blueprints ← インタフェースが変わる可能性がある

他サービスとの連携

  • デコレータに以下を設定することが可能
    • CloudWatch Events
    • S3
    • SQS
    • SNS

Local Modeローカルモード

  • デプロイせずともローカルで起動可能

実践的開発プロセス

ユニットテスト

テストプロジェクトを作成

  • pytestのchaliceプラグインを使って記述する
  • 任意のプロジェクトを引数にtestsディレクトリを作成
    • test_app.py:テストを記述
  • pytestchaliceをインストール

記述

  • pytest -vv コマンドを実行
  • テスト用のclientでリクエストを投げる
  • assertでresponse.status_codeを確認

CI/CD

Source

  • ロジック実装
  • テスト実装
  • ブランチ管理
  • プルリク
  • ピアレビュー

Test

  • py.testでユニットテスト
  • Flake8でLintチェック
  • mypyで静的型チェック

Packgae

  • デプロイパッケージ作成
  • S3にアップロード

deploy

  • CloudFormation
  • chalice deployをチーム開発で利用は非推奨
  • chalice package を利用する

CI/CDテンプレート

  • generate-pipelineでCloudFormation templateを生成可能(builldspec.yml)
  • -bオプションでymlを出力し、構成を管理できる
  • ymlをコードコミットにpullするとパイプラインが流れてデプロイ
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3