Девиз. Мокаем Aws

Тестирование является неотъемлемой частью процесса разработки.

А иногда разработчикам необходимо запускать тесты локально, прежде чем вносить изменения.

Если приложение использует Веб-сервисы Amazon , питон библиотека мото идеально подходит для этого.



Девиз.
</p><p>
 Мокаем AWS

Полный список покрытия ресурса можно посмотреть здесь .

На Github есть репа Хьюго Пикадо мото-сервер .

Готовый образ, запускаем и пользуемся.

Единственный нюанс - после запуска нет АВС ресурсы там еще не созданы.

Что ж, это достаточно легко исправить.

Так как при запуске нужно указать тип услуги ( окружение переменная МОТО_СЕРВИС ), нам остается только описать создание ресурса.

Давайте немного изменим это start.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

Окончательный файл: 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

Мы создаем новый образ и помещаем его в наш реестр.

Далее напишем скрипт инициализации ресурса, например 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

Давайте попробуем это в интерактивном режиме:

Девиз.
</p><p>
 Мокаем 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 Бото3 Документы - boto3.amazonaws.com/v1/documentation/api/latest/index.html Теги: #Инженерные системы #docker #DevOps #Тестирование ИТ-систем #тестирование #Amazon Web Services #moto

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.