背景と目的
- ノーコード(kintone)とコード(Python)を組み合わせて業務の効率化を目指した
- 社内オペレーションの手作業を減らしたかった(見積確認・通知など)
やったことの概要
- kintoneからWebhookでデータ受け取り
- FastAPIで受信 → Google DriveやSMS送信
- Dockerでローカル開発環境を構築してFargateで運用できる状態へ
Webhookの流れ
- kintoneで「新しいレコードが追加された!」
- そのタイミングで 事前に登録しておいたURL(API)に対してPOSTリクエストが飛ぶ
- FastAPIが
/webhook1
や/webhook2
で受け取る - Pythonで処理スタート!
kintoneを経由せずに、ローカル実行もできる
定期実行もPython側のスケジューラーで
import schedule
import time
schedule.every(10).minutes.do(run_timetriger)
┌────────────┐
│ kintone │────┐ Webhookを叩く
└────────────┘ │
▼
┌──────────────┐
│ FastAPI App │
│ main.py │
└──────────────┘
▲ ▲
定期実行(10分)│ │手動実行(runjob_once.py)
│ │
▼ ▼
runtimetriger()
├─ xx()
├─ send_mail()
└─ send_sms()
Fargateでデプロイ
「Dockerイメージを渡すだけで、勝手に動かしてくれる」
[ Dockerイメージ(FastAPI) ]
│
▼
[ Amazon ECR ] ← コンテナ登録
│
▼
[ AWS Fargate ]
(ECSサービス or タスク)
│
▼
[ パブリックURLでアクセス ]
技術構成
- Python 3.9 + FastAPI
- kintone REST API
- Google Drive API
- SMS送信API(MediaSMSなど)
- Docker / AWS Fargate(予定)
ログの仕組み
logging
モジュールで標準出力&ファイル出力- エラーログはファイルに保存
Log_to_text
ヘルパーで環境モードごとにログ分類
AWS App Runner と CloudWatch の連携
- CloudWatch での監視機能
📊 メトリクス監視
App Runnerは様々なメトリクスを収集し、AWS/AppRunner 名前空間でCloudWatchに発行します Viewing App Runner service metrics reported to CloudWatch – AWS App Runner:
主要メトリクス:
CPU使用率 (CPUUtilization) – パーセンテージベース
メモリ使用率 (MemoryUtilization) – パーセンテージベース
リクエスト数 (RequestCount)
レスポンス時間 (ResponseTime)
4xxエラー数 (4XXStatusResponses)
5xxエラー数 (5XXStatusResponses)
アクティブインスタンス数 (ActiveInstances)
📝 ログ管理
App Runnerは各App Runnerサービスに対して2つのCloudWatchログググループを定義します Viewing App Runner logs streamed to CloudWatch Logs – AWS App Runner:
- サービスログ群: /aws/apprunner/[service-name]/service
App Runnerがサービスを管理する際に生成されるログ
ビルドとデプロイメントのログ
サービス状態変更のログ
- アプリケーションログ群: /aws/apprunner/[service-name]/application
実行中のアプリケーションコードの出力
あなたのPythonアプリケーションのprint()やlogger.info()の出力
開発Tips
- FastAPIのCLI実行方法とAPI起動の使い分け
- Docker内でログディレクトリに書けないときの対応方法
- kintoneの認証とレコード更新
学び&反省
- Webhook運用と手動バッチの両立で柔軟性UP
- エラーや未読時の通知処理はシステムに任せてOK!
- kintoneは業務データの「起点」として便利
まとめ
業務系システムでもPython×kintoneでコードとノーコードのいいとこ取りができる。
Slack通知やLINE連携も今後試したい!