موتور. تمسخر AWS

تست بخشی جدایی ناپذیر از فرآیند توسعه است. و گاهی اوقات توسعه دهندگان باید قبل از انجام تغییرات، تست ها را به صورت محلی اجرا کنند.
اگر برنامه استفاده می کند آمازون خدمات وب, پایتون کتابخانه موتور مناسب برای این
موتور. تمسخر AWS

فهرست کاملی از پوشش منابع قابل مشاهده است اینجا.
یک شلغم در Github وجود دارد هوگو پیکادو - موتور سرور. تصویر آماده، راه اندازی و استفاده. تنها نکته ظریف این است که پس از راه اندازی، نه AWS منابع هنوز در آنجا ایجاد نشده است.

خوب، این به اندازه کافی آسان برای تعمیر است.

از آنجایی که هنگام شروع باید نوع سرویس را مشخص کنید (env متغیر MOTO_SERVICE، فقط باید نحوه ایجاد منبع را شرح دهیم.

بیایید کمی آن را تغییر دهیم شروع.ش:

به جای

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

فایل نهایی این است:

شروع.ش

#!/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

بیایید آن را به صورت تعاملی امتحان کنیم:

موتور. تمسخر AWS

این کار می کند

بنابراین ما می‌توانیم 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* کمک می‌کند.

لینک ها:

مخزن موتور - github.com/picadoh/motocker
مخزن موتور - github.com/spulec/moto
Boto3 Docs - boto3.amazonaws.com/v1/documentation/api/latest/index.html

منبع: www.habr.com

اضافه کردن نظر