Moto. Izsmejošs AWS

Testēšana ir izstrādes procesa neatņemama sastāvdaļa. Un dažreiz izstrādātājiem pirms izmaiņu veikšanas ir jāveic testi lokāli.
Ja lietojumprogramma izmanto Amazon Web pakalpojumi, pitons библиотека moto ideāls šim.
Moto. Izsmejošs AWS

Pilnu resursu pārklājuma sarakstu var apskatīt šeit.
Githubā ir rācenis Hugo Pikado Sākot no moto-serveris. Gatavs attēls, palaidiet un izmantojiet. Vienīgā nianse ir tāda, ka pēc palaišanas nē AWS resursi tur vēl nav izveidoti.

Labi, to ir pietiekami viegli salabot.

Kopš sākuma jums ir jānorāda pakalpojuma veids (env mainīgais MOTO_SERVICE), mums tikai jāapraksta resursa izveide.

Mazliet pamainīsim start.sh:

Tā vietā, lai

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Ievietot:

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

Galīgais fails ir:

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

Mēs izveidojam jaunu attēlu un ievietojam to savā reģistrā.

Tālāk, piemēram, uzrakstīsim resursa inicializācijas skriptu SWF domēns, izmantojot bibliotēku darbam ar 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'

Loģika ir šāda:

  • Sākot darbu, mēs ievietojam savu skriptu /opt/init/bootstrap.py.
  • Ja fails ir uzstādīts, tas tiks izpildīts.
  • Ja faila nav, tukšais moto-serveris vienkārši startēs.

Un jūs varat izsmiet visu resursu, palaižot vienu konteineru:

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

Izmēģināsim to interaktīvi:

Moto. Izsmejošs AWS

Tas darbojas!

Tātad mēs varam izveidot docker-compose.yml, kas ietaupīs laiku, pārbaudot izmaiņas:

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

Faktiski šo pieeju var izmantot ne tikai izstrādātāja klēpjdatorā. Sākotnējie testi ar izspēles pēc montāžas palīdzēs atbrīvoties no iespējamām problēmām, darbojoties izstrādātāju* vidēs.

Saites:

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

Avots: www.habr.com

Pievieno komentāru