Moto. Hånende AWS

Test er en integreret del af udviklingsprocessen. Og nogle gange skal udviklere køre test lokalt, før de foretager ændringer.
Hvis applikationen bruger Amazon Web Services, python библиотека moto perfekt til dette.
Moto. Hånende AWS

En komplet liste over ressourcedækning kan ses her.
Der er en majroe på Github Hugo Picadomoto-server. Klar billede, start og brug. Den eneste nuance er, at efter lanceringen, nej AWS der er endnu ikke skabt ressourcer der.

Nå, det er nemt nok at ordne.

Siden du starter skal du angive typen af ​​tjeneste (env variabel MOTO_SERVICE), skal vi blot beskrive oprettelsen af ​​ressourcen.

Lad os ændre det lidt start.sh:

I stedet for

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Indsæt:

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

Den endelige fil er:

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

Vi bygger et nyt image og skubber det ind i vores registreringsdatabasen.

Lad os derefter skrive et ressourceinitialiseringsscript, for eksempel SWF domæne, ved at bruge biblioteket til at arbejde med 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'

Logikken er denne:

  • Når vi starter, monterer vi vores script ind /opt/init/bootstrap.py.
  • Hvis filen er monteret, vil den blive udført.
  • Hvis der ikke er nogen fil, vil den blottede moto-server simpelthen starte.

Og du kan håne en hel ressource ved at starte en container:

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

Lad os prøve det interaktivt:

Moto. Hånende AWS

Det virker!

Så vi kan lave docker-compose.yml, hvilket vil spare tid ved at teste ændringer:

havnearbeider-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

Faktisk kan denne tilgang ikke kun bruges på en udviklers bærbare computer. Foreløbige tests med mocks efter montering vil hjælpe med at slippe af med mulige problemer, når de kører på dev*-miljøer.

referencer:

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

Kilde: www.habr.com

Tilføj en kommentar