Moto. AWS tesztelés

A tesztelés a fejlesztési folyamat szerves része. Néha a fejlesztőknek helyben kell futtatniuk a teszteket a változtatások elkötelezése előtt.
Ha az alkalmazás használja Amazon Web Services, python könyvtár moto tökéletesen alkalmas erre.
Moto. AWS tesztelés

A teljes erőforrás-kiterjedés listáját itt nézheti meg itt.
A Github-on van egy repo Hugo Picado — moto-server. Kész kép, indítsd el, és használd. A csavar csak az, hogy az indítás után még nincsenek AWS erőforrások létrehozva ott.

Nos, ezt elég könnyen meg lehet oldani.

Mivel az indításkor meg kell adni a szolgáltatás típusát (env változót MOTO_SERVICE), csak az erőforrás létrehozását kell leírnunk.

Egy kicsit megváltoztatjuk start.sh:

A

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Beszúrjuk:

if [ -f /opt/init/bootstrap.py ]; then
  moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Indító szkript végrehajtása." && python /opt/init/bootstrap.py)
else
  moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
fi
wait

A végső fájl így néz ki:

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

Új képet építünk és feltöltjük a saját registry-be.

Ezután írjunk egy erőforrás-inicializáló szkriptet, például SWF domain, az AWS-vel való munkához használt boto3 könyvtár segítségével:

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="Teszt SWF domain",
        workflowExecutionRetentionPeriodInDays="10"
    )
except ClientError as e:
    print "A domain már létezik: ", e.response.get("Error", {}).get("Code")

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

print 'Kész'

A logika a következő:

  • Indításkor a szkriptünket a következőképpen csatoljuk /opt/init/bootstrap.py.
  • Ha a fájl csatolva van — végrehajtódik.
  • Ha a fájl nem létezik — csak a sima moto-server fog elindulni.

Így egy teljes erőforrást tudunk mock-olni egyetlen konténer elindításával:

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

Próbáljuk interaktív módban:

Moto. AWS tesztelés

Működik!

Így egy docker-compose.yml-t készíthetünk, amely segít időt spórolni a módosítások tesztelésekor:

docker-compose.yml

verzió: '3'
szolgáltatások:
  s3:
    kép: picadoh/motocker
    környezet:
      - MOTO_SERVICE=s3
      - MOTO_HOST=10.0.1.2
    portok:
      - "5002:5000"
    hálózatok:
      motonet:
        ipv4_cím: 10.0.1.2
    kötetek:
      - /tmp/bootstrap_s3.py:/opt/init/bootstrap.py
  swf:
    kép: picadoh/motocker
    környezet:
      - MOTO_SERVICE=swf
      - MOTO_HOST=10.0.1.3
    portok:
      - "5001:5000"
    hálózatok:
      motonet:
        ipv4_cím: 10.0.1.3
    kötetek:
      - /tmp/bootstrap_swf.py:/opt/init/bootstrap.py
  ec2:
    kép: picadoh/motocker
    környezet:
      - MOTO_SERVICE=ec2
      - MOTO_HOST=10.0.1.4
    portok:
      - "5003:5000"
    hálózatok:
      motonet:
        ipv4_cím: 10.0.1.4
    kötetek:
      - /tmp/bootstrap_ec2.py:/opt/init/bootstrap.py
hálózatok:
  motonet:
    meghajtó: bridge
    ipam:
      konfiguráció:
        - alhálózat: 10.0.0.0/16

Valójában nemcsak a fejlesztő laptopján lehet használni ezt a megközelítést. Az összesítés utáni tesztelés a mock-okkal segít megszabadulni a lehetséges problémáktól a dev* környezetekben.

Linkek:

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

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster