Moto. Mock aws

Pengujian adalah bagian penting dari proses pengembangan. Dan terkadang pengembang perlu menjalankan tes secara lokal, sebelum melakukan perubahan.

Jika aplikasi Anda menggunakan Amazon Web Services , python library moto adalah hal yang sempurna untuk itu.



Daftar lengkap cakupan implementasi ada di sini .

Saya menemukan repo Hugo Picado di Github - moto-server . Siap memulai gambar tidak digunakan. Satu-satunya nuansa adalah bahwa setelah diluncurkan, tidak ada sumber daya AWS akan dibuat.

Yah, cukup mudah untuk memperbaikinya.

Sedangkan kita harus mendefinisikan variabel env MOTO_SERVICE untuk menentukan jenis sumber daya saat peluncuran, yang tersisa adalah mendefinisikan penciptaan sumber daya.

Perbarui start.sh :

Ganti

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT 

dengan

 if [ -f /opt/init/bootstrap.py ]; then moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Executing bootstrap script." && python /opt/init/bootstrap.py) else moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT fi wait 

File harus seperti:

start.sh
 #!/bin/sh # validate required input if [ -z "$MOTO_SERVICE" ]; then echo "Please define AWS service to run with Moto Server (eg s3, ec2, etc)" exit 1 fi # setting defaults for optional input if [ -z "$MOTO_HOST" ]; then MOTO_HOST="0.0.0.0" fi if [ -z "$MOTO_PORT" ]; then MOTO_PORT="5000" fi echo "Starting service $MOTO_SERVICE at $MOTO_HOST:$MOTO_PORT" if [ -f /opt/init/bootstrap.py ]; then moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Executing bootstrap script." && python /opt/init/bootstrap.py) else moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT fi # Prevent container from exiting when bootstrap.py finishing wait 


Bangun gambar baru dan dorong ke registri Anda.

Lebih jauh, mari kita membuat skrip inisialisasi sumber daya, menggunakan perpustakaan untuk bekerja dengan AWS - boto3. Misalnya domain SWF :

bootstrap_swf.py
 import boto3 from botocore.exceptions import ClientError import os os.environ["AWS_ACCESS_KEY_ID"] = "fake" os.environ["AWS_SECRET_ACCESS_KEY"] = "fake" client = boto3.client('swf', region_name='us-west-2', endpoint_url='http://localhost:5000') try: client.register_domain( name='test-swf-mock-domain', description="Test SWF domain", workflowExecutionRetentionPeriodInDays="10" ) except ClientError as e: print "Domain already exists: ", e.response.get("Error", {}).get("Code") response = client.list_domains( registrationStatus='REGISTERED', maximumPageSize=123, reverseOrder=True|False ) print 'Ready' 


Secara logis:

  • Pasang skrip bootstrap kami ke /opt/init/bootstrap.py
  • Jika file di-mount - itu akan dieksekusi
  • Jika tidak - satu-satunya moto-server akan diluncurkan

Jadi, kita dapat mengejek seluruh sumber daya hanya dengan menjalankan satu kontainer saja:

 docker run --name swf -d \ -e MOTO_SERVICE=swf \ -e MOTO_HOST=0.0.0.0 \ -e MOTO_PORT=5000 \ -p 5001:5000 \ -v /tmp/bootstrap_swf.py:/opt/init/bootstrap.py \ -i awesome-repo.com/moto-server:latest 

Mari kita coba dalam mode interaktif:



Itu berhasil!

Jadi, kita dapat membuat docker-compose.yml yang dapat membantu menghemat waktu untuk menguji perubahan:

docker-compose.yml
 version: '3' services: s3: image: picadoh/motocker environment: - MOTO_SERVICE=s3 - MOTO_HOST=10.0.1.2 ports: - "5002:5000" networks: motonet: ipv4_address: 10.0.1.2 volumes: - /tmp/bootstrap_s3.py:/opt/init/bootstrap.py swf: image: picadoh/motocker environment: - MOTO_SERVICE=swf - MOTO_HOST=10.0.1.3 ports: - "5001:5000" networks: motonet: ipv4_address: 10.0.1.3 volumes: - /tmp/bootstrap_swf.py:/opt/init/bootstrap.py ec2: image: picadoh/motocker environment: - MOTO_SERVICE=ec2 - MOTO_HOST=10.0.1.4 ports: - "5003:5000" networks: motonet: ipv4_address: 10.0.1.4 volumes: - /tmp/bootstrap_ec2.py:/opt/init/bootstrap.py networks: motonet: driver: bridge ipam: config: - subnet: 10.0.0.0/16 


Omong-omong, kita bisa menggunakan pendekatan ini tidak hanya di laptop pengembang. Tes pendahuluan dengan mengolok-olok setelah membangun akan membantu kita untuk menyingkirkan kemungkinan masalah pada lingkungan dev *.

Tautan:

Repo Motocker - github.com/picadoh/motocker
Repo Moto - github.com/spulec/moto
Boto3 Documents - boto3.amazonaws.com/v1/documentation/api/latest/index.html

Source: https://habr.com/ru/post/id454892/


All Articles