Moto. Pagbiaybiay sa AWS

Ang pagsulay usa ka hinungdanon nga bahin sa proseso sa pag-uswag. Ug usahay ang mga developer kinahanglan nga magpadagan sa mga pagsulay sa lokal, sa wala pa maghimo mga pagbag-o.
Kung ang aplikasyon naggamit Amazon Web Services, python librarya moto perpekto alang niini.
Moto. Pagbiaybiay sa AWS

Ang usa ka kompleto nga lista sa pagsakup sa kapanguhaan mahimong makita dinhi.
Adunay usa ka turnip sa Github Hugo Picado - moto-server. Andam nga hulagway, ilunsad ug gamiton. Ang bugtong nuance mao nga human sa paglunsad, dili AWS ang mga kahinguhaan wala pa mamugna didto.

Aw, sayon ​​ra kana nga ayohon.

Sukad sa pagsugod kinahanglan nimo ipiho ang klase sa serbisyo (env baryable MOTO_SERVICE), kinahanglan lang natong ihulagway ang pagmugna sa kahinguhaan.

Usbon ta gamay pagsugod.sh:

Hinuon

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Isulod:

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

Ang katapusan nga file mao ang:

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

Nagtukod kami usa ka bag-ong imahe ug iduso kini sa among rehistro.

Sunod, magsulat kita usa ka script sa pagsugod sa kapanguhaan, pananglitan SWF domain, gamit ang librarya para sa pagtrabaho sa 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'

Ang lohika mao kini:

  • Sa pagsugod, among gi-mount ang among script /opt/init/bootstrap.py.
  • Kung ang file gi-mount, kini ipatuman.
  • Kung walay file, ang hubo nga moto-server magsugod lang.

Ug, mahimo nimong bugalbugalan ang usa ka tibuuk nga kapanguhaan pinaagi sa paglansad sa usa ka sudlanan:

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

Atong sulayan kini nga interactive:

Moto. Pagbiaybiay sa AWS

Nagtrabaho!

Aron makahimo kami docker-compose.yml, nga makatipig sa mga pagbag-o sa pagsulay sa oras:

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

Sa tinuud, kini nga pamaagi mahimong magamit dili lamang sa laptop sa usa ka developer. Ang pasiuna nga mga pagsulay nga adunay mga pagbiaybiay pagkahuman sa asembliya makatabang sa pagtangtang sa posible nga mga problema kung nagdagan sa mga dev* nga palibot.

Mga reperensiya:

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

Source: www.habr.com

Idugang sa usa ka comment