Toetsing is 'n integrale deel van die ontwikkelingsproses. En soms moet ontwikkelaars toetse plaaslik uitvoer voordat hulle veranderinge aanbring.
As die toepassing gebruik Amazon Web Services, python biblioteek moto perfek hiervoor.
'n Volledige lys van hulpbrondekking kan bekyk word
Daar is 'n raap op Github Hugo Picado -
Wel, dit is maklik genoeg om reg te maak.
Sedert wanneer jy begin, moet jy die tipe diens spesifiseer (env veranderlik MOTO_SERVICE), ons moet net die skepping van die hulpbron beskryf.
Kom ons verander dit 'n bietjie begin.sh:
In plaas van
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Voeg in:
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
Die finale lΓͺer is:
begin.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
Ons bou 'n nuwe beeld en druk dit in ons register.
Kom ons skryf dan byvoorbeeld 'n hulpbroninitialiseringskrip SWF-domein, gebruik die biblioteek om met AWS te werk - 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'
Die logika is dit:
- Wanneer ons begin, monteer ons ons skrif in /opt/init/bootstrap.py.
- As die lΓͺer gemonteer is, sal dit uitgevoer word.
- As daar geen lΓͺer is nie, sal die kaal moto-bediener eenvoudig begin.
En jy kan 'n hele hulpbron bespot deur een houer te begin:
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
Kom ons probeer dit interaktief:
Π Π°Π±ΠΎΡΠ°Π΅Ρ!
So ons kan docker-compose.yml maak, wat tyd sal bespaar om veranderinge te toets:
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
Eintlik kan hierdie benadering nie net op 'n ontwikkelaar se skootrekenaar gebruik word nie. Voorlopige toetse met spots na samestelling sal help om ontslae te raak van moontlike probleme wanneer jy op dev*-omgewings hardloop.
verwysings:
Motocker repo -
Moto repo -
Boto3 Dokumente -
Bron: will.com