Moto. Chế nhạo AWS

Kiểm thử là một phần không thể thiếu trong quá trình phát triển. Và đôi khi các nhà phát triển cần chạy thử nghiệm cục bộ trước khi thực hiện các thay đổi.
Nếu ứng dụng sử dụng Amazon Web Services, mãng xà thư viện moto hoàn hảo cho việc này.
Moto. Chế nhạo AWS

Một danh sách đầy đủ phạm vi tài nguyên có thể được xem đây.
Có một củ cải trên Github Hugo Picado - máy chủ moto. Hình ảnh sẵn sàng, khởi chạy và sử dụng. Sắc thái duy nhất là sau khi ra mắt, không AWS tài nguyên vẫn chưa được tạo ra ở đó.

Chà, điều đó đủ dễ để sửa chữa.

Vì khi bắt đầu bạn cần chỉ định loại dịch vụ (env Biến đổi MOTO_SERVICE), chúng ta chỉ cần mô tả việc tạo ra tài nguyên.

Hãy thay đổi nó một chút bắt đầu.sh:

Thay vì

moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT

Chèn:

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

Tệp cuối cùng là:

bắt đầu.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

Chúng tôi xây dựng một hình ảnh mới và đẩy nó vào sổ đăng ký của chúng tôi.

Tiếp theo, hãy viết một tập lệnh khởi tạo tài nguyên, ví dụ miền SWF, sử dụng thư viện để làm việc với 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'

Logic là thế này:

  • Khi bắt đầu, chúng tôi gắn tập lệnh của mình vào /opt/init/bootstrap.py.
  • Nếu tập tin được gắn kết, nó sẽ được thực thi.
  • Nếu không có tệp, máy chủ moto đơn giản sẽ khởi động.

Và, bạn có thể mô phỏng toàn bộ tài nguyên bằng cách khởi chạy một vùng chứa:

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

Hãy thử tương tác:

Moto. Chế nhạo AWS

Nó hoạt động!

Vì vậy, chúng ta có thể tạo docker-compose.yml, điều này sẽ tiết kiệm thời gian kiểm tra các thay đổi:

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

Trên thực tế, phương pháp này không chỉ có thể được sử dụng trên máy tính xách tay của nhà phát triển. Các thử nghiệm sơ bộ với mô hình sau khi lắp ráp sẽ giúp loại bỏ các vấn đề có thể xảy ra khi chạy trên môi trường dev*.

Links:

Kho lưu trữ Motocker - github.com/picadoh/motocker
Kho lưu trữ Moto - github.com/spulec/moto
Tài liệu Boto3 - boto3.amazonaws.com/v1/documentation/api/latest/index.html

Nguồn: www.habr.com

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster