Moto. Výsmech AWS

Testovanie je neoddeliteľnou súčasťou procesu vývoja. A niekedy musia vývojári pred vykonaním zmien vykonať testy lokálne.
Ak aplikácia používa Amazon Web Services, krajta библиотека moto ideálne na to.
Moto. Výsmech AWS

Môžete si pozrieť úplný zoznam pokrytia zdrojov tu.
Na Githube je repka Hugo Picado - moto-server. Pripravený obrázok, spustenie a použitie. Jedinou nuansou je, že po spustení nie AWS zdroje tam ešte neboli vytvorené.

No, to sa dá celkom ľahko opraviť.

Pretože pri spustení musíte zadať typ služby (ca. premenná MOTO_SERVICE), musíme len opísať vytvorenie zdroja.

Poďme to trochu zmeniť štart.sh:

Namiesto toho

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Vložiť:

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

Konečný súbor je:

štart.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

Vytvoríme nový imidž a vložíme ho do nášho registra.

Ďalej si napíšme napríklad inicializačný skript zdroja doména SWF, pomocou knižnice na prácu s 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'

Logika je takáto:

  • Pri spustení pripojíme náš skript /opt/init/bootstrap.py.
  • Ak je súbor pripojený, vykoná sa.
  • Ak neexistuje žiadny súbor, jednoducho sa spustí holý moto-server.

A môžete zosmiešniť celý zdroj spustením jedného kontajnera:

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

Skúsme to interaktívne:

Moto. Výsmech AWS

Funguje to!

Takže môžeme vytvoriť docker-compose.yml, čo ušetrí čas pri testovaní zmien:

prístavný robotník-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

V skutočnosti sa tento prístup dá použiť nielen na notebooku vývojára. Predbežné testy s modelmi po zostavení pomôžu zbaviť sa možných problémov pri spustení v prostrediach dev*.

odkazy:

Motocker repo - github.com/picadoh/motocker
Moto repo - github.com/spulec/moto
Boto3 Docs - boto3.amazonaws.com/v1/documentation/api/latest/index.html

Zdroj: hab.com

Pridať komentár