私は次のような状況があります。ドッカー作曲:モック外部サービス
私のアプリケーションは(たとえば、いくつかのSaaSサービス、ElasticSearch程度) 外部APIを呼び出して、単一のWebサービスで構成されています。ユニットテスト以外の目的のために、外部サービスを制御し、後で障害を注入する必要があります。アプリケーションと「模擬」APIがドッキングされ、 今度はすべてのコンテナを回転させるのにdocker-compose
を使用したいと思います。
アプリケーションには複数のアドレスがハードコードされているため(例:外部サービスのホスト名)、私はそれらを変更できず、回避する必要があります。
service
コンテナはhttp://external-service.com/getsomestuff
を呼び出します。
ドッカーが提供するいくつかの機能を使用して、URLを変更せずに外部のhttp://external-service.com/getsomestuff
の外部トラフィックを模擬コンテナに再ルーティングすることを考えました。
マイdocker-compose.yaml
は、次のようになります。
version: '2'
services:
service:
build: ./service
container_name: my-service1
ports:
- "5000:5000"
command: /bin/sh -c "python3 app.py"
api:
build: ./api-mock
container_name: my-api-mock
ports:
- "5001:5000"
command: /bin/sh -c "python3 app.py"
最後に、私は次の処理を行い、ドライバを持っている:
curl -XGET localhost:5000/
curl -XPUT localhost:5001/configure?delay=10
curl -XGET localhost:5000/
秒curl
はわずか10秒にモックの遅延を設定します場所。
私が検討しているいくつかのオプションがあります:
- をドッカネットワークを使用して
iptables
-fu(それをインストールするために修正するDockerfilesを必要とする) - を使用して(これは私には本当に不明である)
私が欲しいものを達成するための簡単なオプションはありますか?
編集:
明確にするために、ここでservice
コードの関連する部分である:
import requests
@app.route('/')
def do_stuff():
r = requests.get('http://external-service.com/getsomestuff')
return process_api_response(r.text())