• HOME
  • /
  • ARTICLES
  • /
  • 速くて軽量なAPI、Starletteを使ってGCPにデプロイする Part1
python / Starlette
Created at:2/28/2020 Updated at:3/2/2020

速くて軽量な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に送ってもらえれば確認してみます🤔

Related Articles

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

Policy

Reproduction or reproduction of all or part of this article is prohibited without the consent of the copyright holder. However, citations are only accepted if the author and article URLs are displayed.