Las pruebas son una parte integral del proceso de desarrollo. Y, a veces, los desarrolladores necesitan ejecutar pruebas localmente antes de realizar cambios.
Si la aplicación utiliza Amazon Web Services, pitón библиотека movimiento perfecto para esto.
Se puede ver una lista completa de la cobertura de recursos.
Hay un nabo en Github Hugo Picado -
Bueno, eso es bastante fácil de arreglar.
Ya que al iniciar es necesario especificar el tipo de servicio (env variable MOTO_SERVICIO), solo tenemos que describir la creación del recurso.
Cambiémoslo un poco inicio.sh:
En lugar de
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Insertar:
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
El archivo final es:
inicio.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
Construimos una nueva imagen y la insertamos en nuestro registro.
A continuación, escribamos un script de inicialización de recursos, por ejemplo. Dominio SWF, utilizando la biblioteca para trabajar con 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'
La lógica es esta:
- Al iniciar montamos nuestro script en /opt/init/bootstrap.py.
- Si el archivo está montado, se ejecutará.
- Si no hay ningún archivo, el servidor moto simplemente se iniciará.
Y puedes burlarte de un recurso completo lanzando un contenedor:
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
Probémoslo de forma interactiva:
Работает!
Entonces podemos crear docker-compose.yml, lo que ahorrará tiempo probando cambios:
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
En realidad, este enfoque se puede utilizar no sólo en la computadora portátil de un desarrollador. Las pruebas preliminares con simulacros después del ensamblaje ayudarán a eliminar posibles problemas al ejecutar en entornos de desarrollo*.
Enlaces:
repositorio de Motocker -
repositorio de motos -
Boto3 Documentos -
Fuente: habr.com