Testado estas integra parto de la evoluprocezo. Kaj kelkfoje programistoj devas fari testojn loke, antaŭ ol fari ŝanĝojn.
Se la aplikaĵo uzas Amazonaj Servoj, python la biblioteko moto perfekta por ĉi tio.
Kompleta listo de rimedpriraportado povas esti rigardita
Estas rapo sur Github Hugo Picado -
Nu, tio estas sufiĉe facile ripari.
Ĉar kiam vi komencas, vi devas specifi la tipon de servo (env variablo MOTO_SERVICE), ni nur devas priskribi la kreadon de la rimedo.
Ni ŝanĝu ĝin iomete komenci.sh:
Anstataŭe
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Enmetu:
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
La fina dosiero estas:
komenci.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
Ni konstruas novan bildon kaj puŝas ĝin en nian registron.
Tuj poste, ni skribu skripton pri inicialigo de rimedoj, ekzemple SWF-domajno, uzante la bibliotekon por labori kun 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 logiko estas jena:
- Komencante, ni muntas nian skripton /opt/init/bootstrap.py.
- Se la dosiero estas muntita, ĝi estos ekzekutita.
- Se ne ekzistas dosiero, la nuda motorservilo simple komenciĝos.
Kaj vi povas moki tutan rimedon lanĉante unu ujon:
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
Ni provu ĝin interage:
Ĝi funkcias!
Do ni povas fari docker-compose.yml, kio ŝparos tempon provante ŝanĝojn:
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
Efektive, ĉi tiu aliro povas esti uzata ne nur sur tekkomputilo de programisto. Preparaj provoj kun mokoj post kunigo helpos forigi eblajn problemojn dum funkciado en dev* medioj.
Referencoj
Motocker-repo -
Moto repo -
Boto3 Docs -
fonto: www.habr.com