เจเฉเจธเจเจฟเฉฐเจ เจตเจฟเจเจพเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเจพ เจเฉฑเจ เจ
เจจเจฟเฉฑเจเฉเจตเจพเจ เจ
เฉฐเจ เจนเฉเฅค เจ
เจคเฉ เจเจ เจตเจพเจฐ เจกเจฟเจตเฉเจฒเจชเจฐเจพเจ เจจเฉเฉฐ เจคเจฌเจฆเฉเจฒเฉเจเจ เจเจฐเจจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจธเจฅเจพเจจเจ เจคเฉเจฐ 'เจคเฉ เจเฉเจธเจ เจเจฒเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค
เจเฉเจเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจตเจฐเจคเจฆเฉ เจนเฉ เจเจฎเจพเจเจผเจพเจจ เจตเฉเฉฑเจฌ เจธเจฐเจตเจฟเจธเจฟเจเจผ, เจชเจพเจเจฅเจจ เจฒเจพเจเจฌเจฐเฉเจฐเฉ เจฎเฉเจเจฐเจธเจพเจเจเจฒ เจเจธ เจฒเจ เจธเฉฐเจชเฉเจฐเจฃ.
เจธเจฐเฉเจค เจเจตเจฐเฉเจ เจฆเฉ เจชเฉเจฐเฉ เจธเฉเจเฉ เจตเฉเจเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ
Github 'เจคเฉ เจเฉฑเจ turnip เจนเฉ เจนเจฟเจเจเฉ เจชเจฟเจเจพเจกเฉ -
เจ เฉเจ เจนเฉ, เจเฉ เจเจฟ เจ เฉเจ เจเจฐเจจ เจฒเจ เจเจพเจซเจผเฉ เจเจธเจพเจจ เจนเฉ.
เจเจฆเฉเจ เจคเฉเจ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเฉ เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉเจตเจพ เจฆเฉ เจเจฟเจธเจฎ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ (เจญเฉเจเฉ เจตเฉเจฐเฉเจเจฌเจฒ 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
เจ เจธเฉเจ เจเฉฑเจ เจจเจตเจพเจ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจธเจพเจกเฉ เจฐเจเจฟเจธเจเจฐเฉ เจตเจฟเฉฑเจ เจงเฉฑเจเจฆเฉ เจนเจพเจเฅค
เจ เฉฑเจเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฑเจ เจธเจฐเฉเจค เจธเจผเฉเจฐเฉเจเจคเฉ เจธเจเฉเจฐเจฟเจชเจ เจฒเจฟเจเฉ SWF เจกเฉเจฎเฉเจจ, 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.
- เจเฉเจเจฐ เจซเจพเจเจฒ เจฎเจพเจเจเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจเจธ เจจเฉเฉฐ เจเจฒเจพเจเจ เจเจพเจตเฉเจเจพเฅค
- เจเฉเจเจฐ เจเฉเจ เจซเจพเจเจฒ เจจเจนเฉเจ เจนเฉ, เจคเจพเจ เจฌเฉเจ เจฐ เจฎเฉเจเฉ-เจธเจฐเจตเจฐ เจฌเจธ เจธเจผเฉเจฐเฉ เจนเฉ เจเจพเจตเฉเจเจพเฅค
เจ เจคเฉ, เจคเฉเจธเฉเจ เจเฉฑเจ เจเฉฐเจเฉเจจเจฐ เจฒเจพเจเจ เจเจฐเจเฉ เจเฉฑเจ เจชเฉเจฐเฉ เจธเจฐเฉเจค เจฆเจพ เจฎเจเจผเจพเจ เจเจกเจพ เจธเจเจฆเฉ เจนเฉ:
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 เจฌเจฃเจพ เจธเจเจฆเฉ เจนเจพเจ, เจเฉ เจธเจฎเฉเจ เจฆเฉ เจเจพเจเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจฌเจเจพเจเจเจพ:
เจกเฉเจเจฐ-เจเฉฐเจชเฉเจเจผ.เจเจ.เจเจฎ.เจเจฒ.
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* เจตเจพเจคเจพเจตเจฐเจฃเจพเจ 'เจคเฉ เจเฉฑเจฒเจฃ เจตเฉเจฒเฉ เจธเฉฐเจญเจพเจตเจฟเจค เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจคเฉเจ เจเฉเจเจเจพเจฐเจพ เจชเจพเจเจฃ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเจจเจเฉเฅค
เจฒเจฟเฉฐเจ:
เจฎเฉเจเฉเจเจฐ เจฐเฉเจชเฉ -
เจฎเฉเจเฉ เจฐเฉเจชเฉ -
Boto3 เจกเฉเจเจธ -
เจธเจฐเฉเจค: www.habr.com