Moto. Moka AWS

Testiranje je neizostavni deo procesa razvoja. Ponekad programerima treba da pokrenu testove lokalno, pre nego što obave promene.
Ako aplikacija koristi Amazon Web Services, python biblioteka moto odlična je za to.
Moto. Moka AWS

Potpun spisak pokrivenosti resursa može se pogledati tukaj.
Na GitHub-u postoji repozitorijum Hugo Picado — moto-server. Spreman imidž, pokreni i koristi. Jedini problem je što nakon pokretanja, nijedan AWS resurs nije još uvek kreiran.

Pa, to je dovoljno lako ispraviti.

Pošto je potrebno odrediti tip usluge prilikom pokretanja (env varijabla MOTO_SERVICE), preostaje nam da opišemo kreiranje resursa.

Malo ćemo promeniti start.sh:

Namesto

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Ubacujemo:

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

Konačni fajl izgleda ovako:

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

Gradimo novi imidž i gurnemo ga u naš registry.

Zatim, napisaćemo skript za inicijalizaciju resursa, na primer SWF domen, koristeći biblioteku za rad sa 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 domen",
        workflowExecutionRetentionPeriodInDays="10"
    )
except ClientError as e:
    print "Domen već postoji: ", e.response.get("Error", {}).get("Code")

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

print 'Spremno'

Logika je sledeća:

  • Montiramo naš skript prilikom pokretanja /opt/init/bootstrap.py.
  • Ako je fajl montiran — biće izvršen.
  • Ako fajl ne postoji — samo će se pokrenuti prazan moto-server.

I, možemo da umokamo ceo resurs pokretanjem jednog kontejnera:

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

Pokušavamo u interaktivnom režimu:

Moto. Moka AWS

Radi!

Tako možemo napraviti docker-compose.yml, koji će pomoći da se uštedi vreme na testiranju izmena:

docker-compose.yml

verzija: '3'
servisi:
  s3:
    slika: picadoh/motocker
    okruženje:
      - MOTO_SERVICE=s3
      - MOTO_HOST=10.0.1.2
    portovi:
      - "5002:5000"
    mreže:
      motonet:
        ipv4_adresa: 10.0.1.2
    volumeni:
      - /tmp/bootstrap_s3.py:/opt/init/bootstrap.py
  swf:
    slika: picadoh/motocker
    okruženje:
      - MOTO_SERVICE=swf
      - MOTO_HOST=10.0.1.3
    portovi:
      - "5001:5000"
    mreže:
      motonet:
        ipv4_adresa: 10.0.1.3
    volumeni:
      - /tmp/bootstrap_swf.py:/opt/init/bootstrap.py
  ec2:
    slika: picadoh/motocker
    okruženje:
      - MOTO_SERVICE=ec2
      - MOTO_HOST=10.0.1.4
    portovi:
      - "5003:5000"
    mreže:
      motonet:
        ipv4_adresa: 10.0.1.4
    volumeni:
      - /tmp/bootstrap_ec2.py:/opt/init/bootstrap.py
mreže:
  motonet:
    drajver: bridge
    ipam:
      konfiguracija:
        - podmreže: 10.0.0.0/16

Ovo se ne može koristiti samo na laptopu developera. Preliminarna testiranja sa mokama nakon izgradnje pomoći će u uklanjanju mogućih problema prilikom pokretanja na dev* okruženjima.

Linkovi:

Motocker repozitorij — github.com/picadoh/motocker
Moto repozitorij — github.com/spulec/moto
Boto3 dokumentacija — boto3.amazonaws.com/v1/dokumentacija/api/latest/index.html

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster