• HOME
  • /
  • 開発ノート
  • /
  • 速くて軽量なAPI、Starletteを使ってGCPにデプロイする Part1
python / Starlette
作成日:2020/2/28 更新日:2020/3/2

速くて軽量なAPI、Starletteを使ってGCPにデプロイする Part1

前に紹介したPythonの軽量APIフレームワークStarletteのGCP(CloudRun)で、開発からリリースまで対応したGitリポジトリを作成しているので、トピックごとに詳細と開発の仕方について紹介しています。

Gitクローンしたソースを用意して、Dockerで環境を構築する

以下のリポジトリからコードをクローンして、docker-composeでPostgreSQLを起動させます。

ksh3/starlette-cloudrun
Starlette framework on GCP CloudRun. Contribute to ksh3/starlette-cloudrun development by creating an account on GitHub.

今回すすめるトピック

Gitでリポジトリをクローンする
docker-composeで依存しているミドルウェアを起動する
python main.pyでStarletteを起動する
APIのエンドポイントを追加する
バックグラウンドタスクを追加する
pytestで非同期処理をテストする
CI/CDはCloudBuildで利用して、継続的にテスト、CloudRunへデプロイできるようにする
CloudRunが起動しているのを確認したら削除する

以下のコマンドを実行してDockerコンテナを作ります。初期データも一緒に作成していて、正常に実行できていれば、テーブル作成とレコードが1件追加されている状態になります。

git clone git@github.com:ksh3/starlette-cloudrun.git
cd starlette-cloudrun
docker-compose up -d
----------------------------------------------------
BUILD LOG----------------------------------------------------

# src/fixtures/000-sample-data.sh

#!/bin/bash
psql -U docker -d docker << EOL
create database docker;
create table robots (id int PRIMARY KEY, name varchar, created_at timestamp);
insert into robots (id, name, created_at) values (1, 'GUIDO', '2020-01-01');
EOL

続けて、仮想環境の作成、ライブラリの追加をpipenvで行います。
Pipfile.lockはOS,ハードウェアによって、ライブラリインストール時にコケる原因になるので、一旦削除してから実行してください。


rm Pipfile.lock
pipenv install
----------------------------------------------------
INSTALL LOG----------------------------------------------------

pipenv shell
python main.py

# OSによってはポートを開く確認ダイアログが出るので許可する
running.png

実行するとログにPostgreSQLへのコネクションが確立しているか出力されています。起動できない場合はDBへの接続に失敗しているのが原因ですので、最初のDockerコンテナ作成がうまく行っていないと思います。おそらく別のサービスがポート5432を使用中かもしれませんね。その場合はポート使っているサービスを落とすか、もしくはソースコード。docker-compose.yamlを編集して5432ポート以外を設定してみるといいでしょう。それでもうまく行かないときはログ貼りつけて@LlcLoftに送ってもらえれば確認してみます🤔

関連記事

python / Starlette
作成日:2020/2/21 更新日:2020/3/2
軽量かつ非同期で実装できるおすすめのフレームワーク、Starlette👍
標準的なWebシステムを作る場合はDjangoがおすすめですが、軽量で非同期なAPIを作りたいこともよくあります。そんな場合に最近よくつかっているのがStarletteというasgiに対応したフレームワークです。
python / Starlette
作成日:2020/3/1 更新日:2020/3/3
速くて軽量なAPI、Starletteを使ってGCPにデプロイする Part2
前回、起動の確認まで行いましたので、今回はPythonで実装するAPIとバックグラウンドタスクの処理を実装します。また、開発をスムーズに行うための便利なツールなどを紹介しています。

ポリシー

この記事のすべてまたは一部の複製は、著作権者の同意なしでは禁止されています。 引用については著者名と記事のURLが表示されている場合に限り認められます。