Moto. Moke AWS

Tès se yon pati entegral nan pwosesis devlopman an. Epi pafwa devlopè yo bezwen kouri tès lokalman, anvan yo komèt chanjman.
Si aplikasyon an itilize Amazon Sèvis Web, python bibliyotèk la mouvman pafè pou sa.
Moto. Moke AWS

Ou ka wè yon lis konplè sou kouvèti resous yo isit la.
Gen yon Navèt sou Github Hugo Picado - moto-sèvè. Pare imaj, lanse ak itilize. Nuans la sèlman se ke apre lansman, pa gen okenn AWS resous yo poko te kreye la.

Oke, sa a ase fasil yo ranje.

Depi lè w kòmanse ou bezwen presize kalite sèvis la (apeprè varyab MOTO_SERVICE), nou jis bezwen dekri kreyasyon resous la.

Ann chanje li yon ti kras kòmanse.sh:

Olye pou yo

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Mete:

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

Dosye final la se:

kòmanse.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

Nou bati yon nouvo imaj epi pouse li nan rejis nou an.

Apre sa, ann ekri yon script inisyalizasyon resous, pou egzanp SWF domèn, lè l sèvi avèk bibliyotèk la pou travay ak 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'

Lojik la se sa a:

  • Lè w kòmanse, nou monte script nou an /opt/init/bootstrap.py.
  • Si fichye a monte, li pral egzekite.
  • Si pa gen okenn dosye, moto-sèvè a fè tou senpleman ap kòmanse.

Epi, ou ka moke yon resous antye lè w lanse yon sèl veso:

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

Ann eseye li entèaktif:

Moto. Moke AWS

Работает!

Se konsa, nou ka fè docker-compose.yml, ki pral ekonomize tan chanjman tès yo:

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

Aktyèlman, apwòch sa a ka itilize pa sèlman sou laptop yon pwomotè. Tès preliminè ak mok apre asanble pral ede debarase m de pwoblèm posib lè w ap kouri sou anviwònman dev*.

Lyen:

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

Sous: www.habr.com

Add nouvo kòmantè