Moto. Spotende AWS

Toetsing is 'n integrale deel van die ontwikkelingsproses. En soms moet ontwikkelaars toetse plaaslik uitvoer voordat hulle veranderinge aanbring.
As die toepassing gebruik Amazon Web Services, python biblioteek moto perfek hiervoor.
Moto. Spotende AWS

'n Volledige lys van hulpbrondekking kan bekyk word hier.
Daar is 'n raap op Github Hugo Picado - moto-bediener. Gereed beeld, bekendstelling en gebruik. Die enigste nuanse is dat na bekendstelling, nee AWS hulpbronne is nog nie daar geskep nie.

Wel, dit is maklik genoeg om reg te maak.

Sedert wanneer jy begin, moet jy die tipe diens spesifiseer (env veranderlik MOTO_SERVICE), ons moet net die skepping van die hulpbron beskryf.

Kom ons verander dit 'n bietjie begin.sh:

In plaas van

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Voeg in:

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

Die finale lΓͺer is:

begin.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

Ons bou 'n nuwe beeld en druk dit in ons register.

Kom ons skryf dan byvoorbeeld 'n hulpbroninitialiseringskrip SWF-domein, gebruik die biblioteek om met AWS te werk - 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'

Die logika is dit:

  • Wanneer ons begin, monteer ons ons skrif in /opt/init/bootstrap.py.
  • As die lΓͺer gemonteer is, sal dit uitgevoer word.
  • As daar geen lΓͺer is nie, sal die kaal moto-bediener eenvoudig begin.

En jy kan 'n hele hulpbron bespot deur een houer te begin:

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

Kom ons probeer dit interaktief:

Moto. Spotende AWS

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!

So ons kan docker-compose.yml maak, wat tyd sal bespaar om veranderinge te toets:

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

Eintlik kan hierdie benadering nie net op 'n ontwikkelaar se skootrekenaar gebruik word nie. Voorlopige toetse met spots na samestelling sal help om ontslae te raak van moontlike probleme wanneer jy op dev*-omgewings hardloop.

verwysings:

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

Bron: will.com

Voeg 'n opmerking