Moto. Nanunuya sa AWS

Ang pagsubok ay isang mahalagang bahagi ng proseso ng pag-unlad. At kung minsan kailangan ng mga developer na magpatakbo ng mga pagsubok nang lokal, bago gumawa ng mga pagbabago.
Kung ang application ay gumagamit Amazon Web Services, python aklatan moto perpekto para dito.
Moto. Nanunuya sa AWS

Maaaring tingnan ang kumpletong listahan ng saklaw ng mapagkukunan dito.
May singkamas sa Github Hugo Picado - moto-server. Handa na ang imahe, ilunsad at gamitin. Ang tanging nuance ay pagkatapos ng paglunsad, hindi AWS hindi pa nagagawa ang mga mapagkukunan doon.

Well, iyon ay sapat na madaling ayusin.

Dahil kapag nagsimula kailangan mong tukuyin ang uri ng serbisyo (env variable MOTO_SERVICE), kailangan lang nating ilarawan ang paglikha ng mapagkukunan.

Baguhin natin ng kaunti simulan.sh:

Sa halip ng

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Ipasok:

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 huling file ay:

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

Bumubuo kami ng bagong imahe at itulak ito sa aming registry.

Susunod, magsulat tayo ng script ng pagsisimula ng mapagkukunan, halimbawa SWF domain, gamit ang library para sa pagtatrabaho 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 ay ito:

  • Kapag nagsisimula, inilalagay namin ang aming script /opt/init/bootstrap.py.
  • Kung ang file ay naka-mount, ito ay isasagawa.
  • Kung walang file, magsisimula lang ang hubad na moto-server.

At, maaari mong kutyain ang isang buong mapagkukunan sa pamamagitan ng paglulunsad ng isang lalagyan:

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

Subukan natin ito nang interactive:

Moto. Nanunuya sa AWS

Gumagana ito!

Para makagawa tayo ng docker-compose.yml, na makakatipid ng oras sa mga pagbabago sa pagsubok:

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 totoo lang, maaaring gamitin ang diskarteng ito hindi lamang sa laptop ng developer. Ang mga paunang pagsubok na may mga pangungutya pagkatapos ng pagpupulong ay makakatulong sa pag-alis ng mga posibleng problema kapag tumatakbo sa mga dev* na kapaligiran.

Link:

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

Pinagmulan: www.habr.com

Magdagdag ng komento