Moto. Ruganje AWS

Testiranje je sastavni dio procesa razvoja. A ponekad programeri moraju da pokreću testove lokalno, prije urezivanja promjena.
Ako aplikacija koristi Amazon Web Services, python biblioteka moto savršeno za ovo.
Moto. Ruganje AWS

Može se vidjeti kompletna lista pokrivenosti resursa ovdje.
Na Githubu postoji repa Hugo Picado - moto-server. Spremna slika, pokretanje i upotreba. Jedina nijansa je da nakon lansiranja ne AWS resursi tamo još nisu stvoreni.

Pa, to je dovoljno lako popraviti.

Pošto prilikom pokretanja potrebno je navesti vrstu usluge (env varijabilna MOTO_SERVICE), moramo samo opisati kreiranje resursa.

Hajde da to malo promenimo start.sh:

Umjesto

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

umetnuti:

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

Konačni fajl 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

Gradimo novu sliku i ubacujemo je u naš registar.

Zatim, napišimo skriptu za inicijalizaciju resursa, na primjer SWF domena, 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 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 sledeca:

  • Prilikom pokretanja, montiramo našu skriptu /opt/init/bootstrap.py.
  • Ako je datoteka montirana, bit će izvršena.
  • Ako nema datoteke, goli moto-server će se jednostavno pokrenuti.

I možete ismijavati cijeli 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

Probajmo interaktivno:

Moto. Ruganje AWS

Radi!

Tako možemo napraviti docker-compose.yml, što će uštedjeti vrijeme testiranja promjena:

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

Zapravo, ovaj pristup se može koristiti ne samo na laptopu programera. Preliminarni testovi sa imitacijama nakon sklapanja pomoći će da se riješite mogućih problema pri pokretanju na dev* okruženjima.

Reference:

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

izvor: www.habr.com

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster