Las pruebas son una parte integral del proceso de desarrollo. Y a veces los desarrolladores necesitan ejecutar pruebas localmente, hasta que se confirme el cambio.
Si la aplicación usa
Amazon Web Services , la biblioteca
python moto es ideal para esto.

Puede encontrar una lista completa de la cobertura de recursos
aquí .
Github tiene un nabo
Hugo Picado -
moto-server . Imagen lista, ejecutar y usar. El único matiz es que después del lanzamiento, todavía no se han creado recursos de
AWS .
Bueno, esto es bastante fácil de arreglar.
Dado que al inicio es necesario especificar el tipo de servicio (
env de la variable
MOTO_SERVICE ), nos queda por describir la creación del recurso.
Cambiemos un poco
start.sh :
En cambio
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
Se obtiene el archivo resultante:
Cree una nueva imagen e ingrese a su registro.
A continuación, escribimos 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:
- Montar al inicio nuestro script en /opt/init/bootstrap.py .
- Si el archivo está montado, se ejecutará.
- Si no hay ningún archivo, simplemente se iniciará el servidor moto simple.
Y puede aplicar un recurso completo iniciando 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
Intentamos en modo interactivo:

Funciona!
Por lo tanto, podemos hacer docker-compose.yml, que ayudará a ahorrar tiempo en los cambios de prueba:
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, no solo en la computadora portátil del desarrollador, puede usar este enfoque. Las pruebas preliminares con moks después de la compilación ayudarán a deshacerse de posibles problemas al ejecutar en entornos de desarrollo *.
Referencias
Repo de
Motocker -
github.com/picadoh/motockerMoto repo -
github.com/spulec/motoDocumentos de
Boto3 :
boto3.amazonaws.com/v1/documentation/api/latest/index.html