Moto. Mokante AWS

Testado estas integra parto de la evoluprocezo. Kaj kelkfoje programistoj devas fari testojn loke, antaŭ ol fari ŝanĝojn.
Se la aplikaĵo uzas Amazonaj Servoj, python la biblioteko moto perfekta por ĉi tio.
Moto. Mokante AWS

Kompleta listo de rimedpriraportado povas esti rigardita tie.
Estas rapo sur Github Hugo Picado - moto-servilo. Preta bildo, lanĉo kaj uzo. La sola nuanco estas, ke post lanĉo, ne AWS tie ankoraŭ ne estis kreitaj rimedoj.

Nu, tio estas sufiĉe facile ripari.

Ĉar kiam vi komencas, vi devas specifi la tipon de servo (env variablo MOTO_SERVICE), ni nur devas priskribi la kreadon de la rimedo.

Ni ŝanĝu ĝin iomete komenci.sh:

Anstataŭe

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Enmetu:

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

La fina dosiero estas:

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

Ni konstruas novan bildon kaj puŝas ĝin en nian registron.

Tuj poste, ni skribu skripton pri inicialigo de rimedoj, ekzemple SWF-domajno, uzante la bibliotekon por labori kun 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'

La logiko estas jena:

  • Komencante, ni muntas nian skripton /opt/init/bootstrap.py.
  • Se la dosiero estas muntita, ĝi estos ekzekutita.
  • Se ne ekzistas dosiero, la nuda motorservilo simple komenciĝos.

Kaj vi povas moki tutan rimedon lanĉante unu ujon:

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

Ni provu ĝin interage:

Moto. Mokante AWS

Ĝi funkcias!

Do ni povas fari docker-compose.yml, kio ŝparos tempon provante ŝanĝojn:

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

Efektive, ĉi tiu aliro povas esti uzata ne nur sur tekkomputilo de programisto. Preparaj provoj kun mokoj post kunigo helpos forigi eblajn problemojn dum funkciado en dev* medioj.

Referencoj

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

fonto: www.habr.com

Aldoni komenton