2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Chalice on Local

Last updated at Posted at 2022-02-23

この記事の目的

この記事の目的は、AWS製のサーバーレスフレームワークChaliceとDynamoDBを組み合わせて利用する手順を個人的なメモとして記すことです。

前回の内容を補完する意味でローカルでの実行に特化しています。

以下の内容を含みます。

  • Chalice, DynamoDBLocalを用いてローカルマシンで利用します
  • ローカル環境でのIDEを利用したデバッグ
  • docker-composeを利用して、DynamoDBLocalを起動します

前提事項

以下のインストールについては済んでいるものとします。

  • Python3
  • chalice
  • docker-compose
  • Python 3.8.9 (Pipenv利用)
  • chalice 1.26.4
  • AWS-CLI 2.4.11
  • docer-compose 2.1.1
  • VSCode 1.63.2
  • macOS Monterey 12.1

References

Chalice公式サイト https://aws.github.io/chalice/index.html

基本的な構築手順

前回記事やChalice公式サイトを参照ください。

DynamoDB localをdocker-composeで起動する。

ソースコードとは別のディレクトリ(同列の階層にする)に、docker-compose.ymlを作成します。

docker-compose.yml
version: "3.8"
services:
  dynamodb-local:
    command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
    image: "amazon/dynamodb-local:latest"
    container_name: dynamodb-local
    ports:
      - "8000:8000"
    volumes:
      - "./docker/dynamodb:/home/dynamodblocal/data"
    working_dir: /home/dynamodblocal
  dynamodb-admin:
    container_name: dynamodb-admin
    image: aaronshaf/dynamodb-admin:latest
    environment:
      - DYNAMO_ENDPOINT=dynamodb-local:8000
    ports:
      - 8001:8001
    depends_on:
      - dynamodb-local

DynamoDB Localとdynamodb-adminを起動します。

% docker-compose up
[+] Running 2/1
 ⠿ Container dynamodb-local  Created                                                                                                                                 0.1s
 ⠿ Container dynamodb-admin  Created                                                                                                                                 0.0s
Attaching to dynamodb-admin, dynamodb-local
dynamodb-local  | Initializing DynamoDB Local with the following configuration:
dynamodb-local  | Port: 8000
dynamodb-local  | InMemory:     false
dynamodb-local  | DbPath:       ./data
dynamodb-local  | SharedDb:     true
dynamodb-local  | shouldDelayTransientStatuses: false
dynamodb-local  | CorsParams:   *
dynamodb-local  | 
dynamodb-admin  |   database endpoint:  dynamodb-local:8000
dynamodb-admin  |   region:             us-east-1
dynamodb-admin  |   accessKey:          key
dynamodb-admin  |
dynamodb-admin  |   dynamodb-admin listening on http://localhost:8001 (alternatively http://0.0.0.0:8001)

dynamodb-adminでテーブルを作成する。

localhost:8001でdynamodb-adminのGUIに入れます。

CreateTableをします。(テーブル名とキーだけ指定すれば良いです)
dynamodb-admin-screen.png

chalice localコマンドでローカル実行!

config.jsonにローカル用の定義を追加

以下のように、stagesにlocalの定義を追加します。

.chalice/config.json
{
  "version": "2.0",
  "app_name": "chalice_demo",
  "stages": {
    "dev": {
      "api_gateway_stage": "api",
      "environment_variables": {
        "DB_TABLE_NAME": "Records"
      },
      "autogen_policy": false
-    }
+    },
+    "local": {
+      "environment_variables": {
+        "IS_LOCAL": "true",
+        "DB_ENDPOINT": "http://localhost:8000",
+        "DB_TABLE_NAME": "LocalRecords"
+      }
+    }
  }
}

説明:
いずれも環境変数の設定です。

  • IS_LOCAL : ローカル実行か否かを示します(今後の記事で予定している認証の切り替えに使います)
  • DB_ENDPOINT : DynamoDB Localのエンドポイントを指定します
  • DB_TABLE_NAME : テーブル名です(ローカル用にあえて値を変えています)

ローカルでchaliceを実行します。

注意!
デフォルトだとstageはdev, portは8000となります。
いずれも、他で使用しているため、明示的にコマンド引数で指定します。

% chalice local --stage local --port 8080
Serving on http://127.0.0.1:8080

chalice local で --stage localとするのはかなり間抜けですが...
余談ですが、--stageを指定しないと、awsのDynamoDBにつながります。(awsのクレデンシャルを設定している場合)

ローカルのAPIエンドポイントを叩いてみる!(出力は見やすく整形しています)

% curl localhost:8080/records/166d6c4323d742bc9af87fcc0c3e2241
{
  "sub":"LOCAL_USER",
  "result_time":"00:24:59",
  "race":"3",
  "runner_name":"test-runner3",
  "description":"Memo3",
  "section":"3",
  "id":"166d6c4323d742bc9af87fcc0c3e2241",
  "team":"TeamX"
}

IDEでのデバッグ実行

IDEにはPyCharmを使いました。(VSCodeと迷いましたが、デバッグの設定に関してはPyCharmの方が簡単だったので)

実行済みのchalice localのプロセスにアタッチします。
debug1.png

プロセスを選択します。
debug2.png

ブレイクポイントで停止し変数のウォッチなどができます。(通常のデバッグと同様です)
debug3.png

まとめ

今回は、Chalice on Localということで、ローカルでの実行とデバッグを行いました。

正直、awsにデプロイする方が手っ取り早い気もしますが、アプリケーションのロジックのデバッグがローカルで出来ると良い面もあるので、方法を知っておいても損はないかなぁと思いました。

次は、認証でAPIを保護するというのを試してみたいと思います。

ソースコードは、GitHubにあげてあります。

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?