Moto. Moka AWS

Testimi është një pjesë e pandashme e procesit të zhvillimit. Dhe ndonjëherë zhvilluesit duhet të ekzekutojnë testet lokalmente, para se të regjistrojnë ndryshimet.
Nëse aplikacioni përdor Shërbimet Amazon Web, python bibliotekë moto është perfekt për këtë.
Moto. Moka AWS

Lista e plotë e mbulimit të burimeve mund të krijohet këtu.
NĂ« Github ka njĂ« repo Hugo Picado — moto-server. Imazhi i gatshĂ«m, nis dhe pĂ«rdor. Detaji Ă«shtĂ« se pas nisjes, nuk ka AWS burime atje ende nuk janĂ« krijuar.

Mirë, kjo është mjaft e lehtë për t'u korrigjuar.

Pasi gjatë nisjes duhet të caktosh tipin e shërbimit (env variabël MOTO_SERVICE), na mbetet të përshkruajmë krijimin e burimit.

Futni pak ndryshim në start.sh:

Në vend të

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Shtojmë:

if [ -f /opt/init/bootstrap.py ]; then
  moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Ekzekutimi i skriptit bootstrap." && python /opt/init/bootstrap.py)
else
  moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
fi
wait

Skedari përfundimtar është:

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

Ndërtojmë një imazh të ri dhe e dërgojmë në regjistrin tonë.

Pastaj, do të shkruajmë një skript për inicializimin e burimit, për shembull SWF domain, duke përdorur bibliotekën për punë me 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'

Logjika është e tillë:

  • Muntazhim gjatĂ« nisjes sĂ« skriptit tonĂ« nĂ« /opt/init/bootstrap.py.
  • NĂ«se skedari Ă«shtĂ« montuar - ai do tĂ« ekzekutohet.
  • NĂ«se skedari nuk ekziston - moto-server i thjeshtĂ« do tĂ« fillojĂ«.

Dhe, mund të moksim një burim të tërë vetëm duke nisur një kontejner:

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

Provohet në mënyrë interaktive:

Moto. Moka AWS

Funksionon!

Në këtë mënyrë, mund të krijojmë një docker-compose.yml, i cili do të ndihmojë në kursimin e kohës për testimin e ndryshimeve:

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

Në të vërtetë, ky qasje nuk është vetëm për laptopin e zhvilluesit. Testet paraprake me mock përpara ndërtimit, ndihmojnë të eliminojnë problemet e mundshme gjatë lansimit në mjediset dev*.

Lidhjet:

Repo Motocker — github.com/picadoh/motocker
Repo Moto — github.com/spulec/moto
Dokumentet Boto3 — boto3.amazonaws.com/v1/documentation/api/latest/index.html

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster