Moto. Mokať AWS

Testovanie je neoddeliteľnou súčasťou procesu vývoja. A niekedy potrebujú vývojári spustiť testy lokálne pred tým, ako zmeny odovzdajú.
Ak aplikácia používa Amazon Web Services, python knižnice moto je na to ideálne.
Moto. Mokať AWS

Úplný zoznam pokrytia zdrojov si môžete pozrieť tu.
Na Githube je repozitár Hugo Picado — moto-server. Hotový obraz, spustiť a používať. Jediný problém je, že po spustení tam ešte nie sú vytvorené žiadne AWS zdroje.

No, to sa dá celkom jednoducho opraviť.

Keďže pri spustení je potrebné zadať typ služby (env premenná MOTO_SERVICE), zostáva nám popísať vytvorenie zdroja.

Trochu zmeníme start.sh:

Namiesto

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Vkladáme:

if [ -f /opt/init/bootstrap.py ]; then
  moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Spúšťam bootstrap skript." && python /opt/init/bootstrap.py)
else
  moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
fi
wait

Konečný súbor je:

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

Vytvárame nový obraz a nahráme ho do svojho registry.

Ďalej napíšeme skript na inicializáciu zdroja, napríklad SWF domain, 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 "Doména už existuje: ", e.response.get("Error", {}).get("Code")

response = client.list_domains(
    registrationStatus='REGISTERED',
    maximumPageSize=123,
    reverseOrder=True|False
)

print 'Pripravené'

Logika je taká:

  • Pripojíme náš skript pri spustení /opt/init/bootstrap.py.
  • Ak je súbor pripojený — bude vykonaný.
  • Ak súbor neexistuje — jednoducho sa spustí čistý moto-server.

A môžeme mockovať 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úšame v interaktívnom režime:

Moto. Mokať AWS

Funguje!

Takto môžeme vytvoriť docker-compose.yml, ktorý pomôže ušetriť čas na testovanie zmien:

docker-compose.yml

verzia: '3'
služby:
  s3:
    obrázok: picadoh/motocker
    prostredie:
      - MOTO_SERVICE=s3
      - MOTO_HOST=10.0.1.2
    porty:
      - "5002:5000"
    siete:
      motonet:
        ipv4_adresa: 10.0.1.2
    objemy:
      - /tmp/bootstrap_s3.py:/opt/init/bootstrap.py
  swf:
    obrázok: picadoh/motocker
    prostredie:
      - MOTO_SERVICE=swf
      - MOTO_HOST=10.0.1.3
    porty:
      - "5001:5000"
    siete:
      motonet:
        ipv4_adresa: 10.0.1.3
    objemy:
      - /tmp/bootstrap_swf.py:/opt/init/bootstrap.py
  ec2:
    obrázok: picadoh/motocker
    prostredie:
      - MOTO_SERVICE=ec2
      - MOTO_HOST=10.0.1.4
    porty:
      - "5003:5000"
    siete:
      motonet:
        ipv4_adresa: 10.0.1.4
    objemy:
      - /tmp/bootstrap_ec2.py:/opt/init/bootstrap.py
siete:
  motonet:
    vodič: bridge
    ipam:
      konfigurácia:
        - podsieť: 10.0.0.0/16

Súčasne, tento prístup nie je obmedzený len na počítač vývojára. Predbežné testy s mockami po zostavení pomôžu zbaviť sa možných problémov pri spúšťaní na dev* prostrediach.

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: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster