בדיקה היא חלק בלתי נפרד מתהליך הפיתוח. ולפעמים מפתחים צריכים להריץ בדיקות באופן מקומי, לפני ביצוע שינויים.
אם האפליקציה משתמשת אמזון שירותי אינטרנט, פִּיתוֹן библиотека אופנוע מושלם עבור זה.

ניתן לראות רשימה מלאה של כיסוי משאבים .
יש לפת ב-Github הוגו פיקדו - . תמונה מוכנה, השקה ושימוש. הניואנס היחיד הוא שאחרי ההשקה, לא AWS עדיין לא נוצרו שם משאבים.
ובכן, זה קל מספיק לתקן.
מאז שמתחיל צריך לציין את סוג השירות (env משתנה MOTO_SERVICE), אנחנו רק צריכים לתאר את יצירת המשאב.
בואו נשנה את זה קצת start.sh:
במקום זאת
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $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
wait
הקובץ הסופי הוא:
start.sh
#!/bin/sh
# validate required input
if [ -z "$MOTO_SERVICE" ]; then
echo "Please define AWS service to run with Moto Server (e.g. 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אנו בונים תמונה חדשה ודוחפים אותה לרישום שלנו.
לאחר מכן, בוא נכתוב סקריפט אתחול משאבים, למשל דומיין SWF, באמצעות הספרייה לעבודה עם AWS - boto3:
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'
ההיגיון הוא כזה:
- כאשר מתחילים, אנו מעלים את הסקריפט שלנו /opt/init/bootstrap.py.
- אם הקובץ מותקן, הוא יבוצע.
- אם אין קובץ, שרת המוטו החשוף פשוט יתחיל.
בנוסף, אתה יכול ללעוג למשאב שלם על ידי השקת מיכל אחד:
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
בואו ננסה זאת באופן אינטראקטיבי:

Работает!
אז נוכל ליצור docker-compose.yml, שיחסוך זמן בבדיקת שינויים:
docker-compose.ym
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
למעשה, ניתן להשתמש בגישה זו לא רק במחשב הנייד של מפתח. בדיקות ראשוניות עם דוגמיות לאחר הרכבה יסייעו להיפטר מבעיות אפשריות בעת הפעלה על סביבות מפתח*.
קישורים:
ריפו של מוטוקר -
ריפו מוטו -
Boto3 Docs -
מקור: www.habr.com
