Мото. AWS-ийг шоолж байна

Туршилт нь хөгжлийн үйл явцын салшгүй хэсэг юм. Заримдаа хөгжүүлэгчид өөрчлөлт хийхээсээ өмнө дотооддоо тест хийх шаардлагатай болдог.
Хэрэв програм ашигладаг бол Амазоны Вэб үйлчилгээ, Python номын сан мотоцикл үүнд төгс.
Мото. AWS-ийг шоолж байна

Нөөцийн хамрах хүрээний бүрэн жагсаалтыг харж болно энд.
Github дээр манжин байдаг Уго Пикадо - мото сервер. Бэлэн зураг, эхлүүлэх, ашиглах. Цорын ганц нюанс бол хөөргөсний дараа, үгүй AWS тэнд нөөц хараахан бүрдээгүй байна.

За, үүнийг засахад хангалттай хялбар.

Эхлэхдээ та үйлчилгээний төрлийг зааж өгөх хэрэгтэй (энхтайван хувьсагч MOTO_SERVICE), бид зөвхөн нөөцийг бий болгохыг тайлбарлах хэрэгтэй.

Жаахан өөрчилье эхлэх.sh:

Оронд нь

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $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
wait

Эцсийн файл нь:

эхлэх.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

Бид шинэ дүрс бүтээж, бүртгэлдээ оруулдаг.

Дараа нь, жишээ нь, нөөцийг эхлүүлэх скрипт бичье SWF домэйн, 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'

Логик нь ийм байна:

  • Эхлэхдээ бид скриптээ оруулдаг /opt/init/bootstrap.py.
  • Хэрэв файлыг суулгасан бол гүйцэтгэнэ.
  • Хэрэв файл байхгүй бол нүцгэн мото сервер зүгээр л эхлэх болно.

Мөн та нэг контейнер ажиллуулснаар бүхэл бүтэн нөөцийг шоолж болно:

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

Үүнийг интерактив байдлаар туршиж үзье:

Мото. AWS-ийг шоолж байна

Работает!

Тиймээс бид docker-compose.yml-г хийх боломжтой бөгөөд энэ нь туршилтын өөрчлөлтөд цаг хэмнэх болно:

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

Үнэндээ энэ аргыг зөвхөн хөгжүүлэгчийн зөөврийн компьютер дээр ашиглах боломжгүй юм. Угсарсны дараа хуурамчаар хийсэн урьдчилсан туршилтууд нь dev* орчинд ажиллах үед гарч болзошгүй асуудлаас ангижрахад тусална.

Ашигласан материал:

Мотокер репо - github.com/picadoh/motocker
Мото репо - github.com/spulec/moto
Boto3 Docs - boto3.amazonaws.com/v1/documentation/api/latest/index.html

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх