Moto. Kohandame AWS

Testimine on arendamisprotsessi lahutamatu osa. Ja mõnikord peavad arendajad testima kohaliku tasemega enne muudatuste commitimist.
Kui rakendus kasutab Amazon Web Services, python raamatukogu moto sobib sellele ideaalselt.
Moto. Kohandame AWS

Kogu ressursside katvuse nimekirja saab vaadata siit.
Githubis on repo Hugo Picadomoto-server. Valmis pilt, käivita ja kasuta. Ainult detail on see, et pärast käivitamist ei ole seal veel ühtegi AWS ressurssi loodud.

Noh, see on üsna lihtne parandada.

Kuna käivitamisel tuleb määrata teenuse tüüp (env muutuja MOTO_SERVICE), jääb meil üle ressursi loomise kirjeldamine.

Teeme natuke muudatust start.sh:

Asenda

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Sisestame:

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

Lõplik fail on järgmine:

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

Kogume uue pildi ja pushime oma registry'sse.

Seejärel kirjutame ressursi initsialiseerimise skripti, näiteks SWF domeen, kasutades AWS-i jaoks mõeldud raamatukogu - 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 domeen",
        workflowExecutionRetentionPeriodInDays="10"
    )
except ClientError as e:
    print "Domeen eksisteerib juba: ", e.response.get("Error", {}).get("Code")

response = client.list_domains(
    registrationStatus='REGISTERED',
    maximumPageSize=123,
    reverseOrder=True|False
)

print 'Valmis'

Loogika on järgmine:

  • Kinnitatakse meie skript käivitamisel /opt/init/bootstrap.py.
  • Kui fail on kinnitatud - see täidetakse.
  • Kui faili pole - käivitub lihtsalt puhas moto-server.

Ja sellega saab terve ressursi takistada ühe konteineri käivitamisega:

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

Proovime interaktiivses režiimis:

Moto. Kohandame AWS

Töötab!

Seega saame luua docker-compose.yml, mis aitab testimise muudatuste ajal aega kokku hoida:

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

Tegelikult ei saa sellist lähenemist kasutada ainult arendaja sülearvutil. Eelnevad testid mokeid kasutades pärast koostamist aitavad vabaneda võimalikest probleemidest dev* keskkondades.

Lingid:

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

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster