Туршилт нь хөгжлийн үйл явцын салшгүй хэсэг юм. Заримдаа хөгжүүлэгчид өөрчлөлт хийхээсээ өмнө дотооддоо тест хийх шаардлагатай болдог.
Хэрэв програм ашигладаг бол Амазоны Вэб үйлчилгээ, Python номын сан мотоцикл үүнд төгс.
Нөөцийн хамрах хүрээний бүрэн жагсаалтыг харж болно
Github дээр манжин байдаг Уго Пикадо -
За, үүнийг засахад хангалттай хялбар.
Эхлэхдээ та үйлчилгээний төрлийг зааж өгөх хэрэгтэй (энхтайван хувьсагч MOTO_SERVICE), бид зөвхөн нөөцийг бий болгохыг тайлбарлах хэрэгтэй.
Жаахан өөрчилье эхлэх.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
Эцсийн файл нь:
эхлэх.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-г хийх боломжтой бөгөөд энэ нь туршилтын өөрчлөлтөд цаг хэмнэх болно:
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 Docs -
Эх сурвалж: www.habr.com