Мото. Ругајући се АВС

Тестирање је саставни део процеса развоја. А понекад програмери морају да покрећу тестове локално, пре него што унесу промене.
Ако апликација користи Амазон Веб Сервицес, питон библиотека Мото савршено за ово.
Мото. Ругајући се АВС

Може се видети комплетна листа покривености ресурса овде.
На Гитхуб-у постоји репа Хуго Пицадо - мото-сервер. Спремна слика, покретање и употреба. Једина нијанса је да након лансирања, не АВС ресурси тамо још нису створени.

Па, то је довољно лако поправити.

Пошто приликом покретања потребно је да наведете врсту услуге (енв променљива МОТО_СЕРВИЦЕ), морамо само да опишемо креирање ресурса.

Хајде да то мало променимо старт.сх:

Уместо

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

Правимо нову слику и гурамо је у наш регистар.

Затим, хајде да напишемо скрипту за иницијализацију ресурса, на пример СВФ домен, користећи библиотеку за рад са АВС - бото3:

боотстрап_свф.пи

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'

Логика је следећа:

  • Када почињемо, монтирамо нашу скрипту /опт/инит/боотстрап.пи.
  • Ако је датотека монтирана, биће извршена.
  • Ако нема датотеке, голи мото-сервер ће се једноставно покренути.

И можете се ругати читавом ресурсу покретањем једног контејнера:

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

Хајде да пробамо интерактивно:

Мото. Ругајући се АВС

Ради!

Тако можемо да направимо доцкер-цомпосе.имл, што ће уштедети време приликом тестирања промена:

доцкер-цомпосе.имл

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

У ствари, овај приступ се може користити не само на лаптопу програмера. Прелиминарни тестови са имитацијама након склапања ће помоћи да се решите могућих проблема при покретању у дев* окружењима.

Референце:

Мотоцкер репо - гитхуб.цом/пицадох/мотоцкер
Мото репо - гитхуб.цом/спулец/мото
Бото3 документи - бото3.амазонавс.цом/в1/доцументатион/апи/латест/индек.хтмл

Извор: ввв.хабр.цом

Купите поуздан хостинг за сајтове са ДДоС заштитом, ВПС ВДС сервере 🔥 Купите поуздан веб хостинг са DDoS заштитом, VPS VDS сервере | ProHoster