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 Ito ay perpekto para dito.
Moto. Nanunuya sa AWS

Ang isang buong listahan ng saklaw ng mapagkukunan ay matatagpuan dito.
Mayroong repo sa Github Hugo Picado - moto-serverAng imahe ay handa na, ilunsad ito at gamitin ito. Ang tanging caveat ay pagkatapos ng paglunsad, wala AWS hindi pa nagagawa ang mga mapagkukunan doon.

Well, iyon ay sapat na madaling ayusin.

Dahil kailangan mong tukuyin ang uri ng serbisyo kapag nagsisimula (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

Ipinasok namin:

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, magsusulat kami ng script ng pagsisimula ng mapagkukunan, halimbawa SWF domain, gamit ang AWS library — 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:

  • Inilalagay namin ang aming script sa pagsisimula /opt/init/bootstrap.py.
  • Kung ang file ay naka-mount, ito ay isasagawa.
  • Kung nawawala ang file, magsisimula lang ang hubad na moto-server.

At, maaari mong kutyain ang isang buong mapagkukunan sa pamamagitan ng pagpapatakbo 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 sa interactive na mode:

Moto. Nanunuya sa AWS

Gumagana ito!

Kaya, maaari tayong lumikha ng docker-compose.yml file na makakatulong na makatipid ng oras sa pagsubok ng mga pagbabago:

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 katunayan, ang diskarte na ito ay maaaring gamitin hindi lamang sa laptop ng isang developer. Makakatulong ang mga paunang pagsubok na may mga pangungutya pagkatapos ng build na alisin ang mga potensyal na isyu kapag tumatakbo sa mga dev* environment.

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

Bumili ng maaasahang pagho-host para sa mga site na may proteksyon ng DDoS, mga server ng VPS VDS 🔥 Bumili ng maaasahang website hosting na may proteksyon ng DDoS, VPS VDS servers | ProHoster