ะขะตััะธัะพะฒะฐะฝะธะต โ ััะพ ะฝะตะพััะตะผะปะตะผะฐั ัะฐััั ะฟัะพัะตััะฐ ัะฐะทัะฐะฑะพัะบะธ. ะ ะธะฝะพะณะดะฐ ัะฐะทัะฐะฑะพััะธะบะฐะผ ััะตะฑัะตััั ะทะฐะฟัััะธัั ัะตััั ะปะพะบะฐะปัะฝะพ, ะดะพ ัะพะณะพ ะผะพะผะตะฝัะฐ ะบะพะผะผะธัะฐ ะธะทะผะตะฝะตะฝะธะน.
ะัะปะธ ะฟัะธะปะพะถะตะฝะธะต ะธัะฟะพะปัะทัะตั Amazon Web Services, python เบซเปเบญเบเบชเบฐเบซเบกเบธเบ เบฅเบปเบเบเบฑเบ ะธะดะตะฐะปัะฝะพ ะดะปั ััะพะณะพ ะฟะพะดั
ะพะดะธั.
ะะพะปะฝัะน ัะฟะธัะพะบ ะฟะพะบัััะธั ัะตััััะพะฒ ะผะพะถะฝะพ ะฟะพัะผะพััะตัั
ะะฐ Github ะตััั ัะตะฟะฐ Hugo Picado -
ะงัะพ ะถ, ััะพ ะดะพััะฐัะพัะฝะพ ะปะตะณะบะพ ะธัะฟัะฐะฒะธัั.
ะะพัะบะพะปัะบั ะฟัะธ ะทะฐะฟััะบะต ะฝะตะพะฑั ะพะดะธะผะพ ัะบะฐะทะฐัั ัะธะฟ ัะตัะฒะธัะฐ (เบเบฐเบกเบฒเบ เบเบปเบงเปเบ 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
ะะธะปะดะธะผ ะฝะพะฒัะน ะพะฑัะฐะท ะธ ะฟััะธะผ ะฒ ัะฒะพะน registry.
ะะฐะปะตะต, ะฝะฐะฟะธัะตะผ ัะบัะธะฟั ะธะฝะธัะธะฐะปะธะทะฐัะธะธ ัะตััััะฐ, ะฝะฐะฟัะธะผะตั SWF domain, ะธัะฟะพะปัะทัั ะฑะธะฑะปะธะพัะตะบั ะดะปั ัะฐะฑะพัั ั 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.
- ะัะปะธ ัะฐะนะป ะฟัะธะผะพะฝัะธัะพะฒะฐะฝ โ ะพะฝ ะฑัะดะตั ะฒัะฟะพะปะฝะตะฝ.
- ะัะปะธ ัะฐะนะปะฐ ะฝะตั โ ะฟัะพััะพ ะทะฐะฟัััะธััั ะณะพะปัะน moto-server.
ะ, ะผะพะถะฝะพ ะผะพะบะฐัั ัะตะปัะน ัะตัััั ะทะฐะฟััะบะพะผ ะพะดะฝะพะณะพ ะบะพะฝัะตะนะฝะตัะฐ:
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.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
ะกะพะฑััะฒะตะฝะฝะพ, ะฝะต ัะพะปัะบะพ ะปะธัั ะฝะฐ ะฝะพััะฑัะบะต ัะฐะทัะฐะฑะพััะธะบะฐ ะผะพะถะฝะพ ะธัะฟะพะปัะทะพะฒะฐัั ัะฐะบะพะน ะฟะพะดั ะพะด. ะัะตะดะฒะฐัะธัะตะปัะฝัะต ัะตััั ั ะผะพะบะฐะผะธ ะฟะพัะปะต ัะฑะพัะบะธ, ะฟะพะผะพะณัั ะธะทะฑะฐะฒะธัััั ะพั ะฒะพะทะผะพะถะฝัั ะฟัะพะฑะปะตะผ ะฟัะธ ะทะฐะฟััะบะต ะฝะฐ dev* ะพะบััะถะตะฝะธัั .
เปเบญเบเบฐเบชเบฒเบเบญเปเบฒเบเบญเบตเบ:
Motocker repo โ
Moto repo โ
Boto3 Docs โ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com