рдореЛрдЯреЛред AWS рд░реЛрддреЗ рд╣реИрдВ

рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИред рдФрд░ рдХрднреА-рдХрднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред
рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдореЗрдЬрд╝рди рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЛрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрджрд░реНрд╢ рд╣реИред


рд╕рдВрд╕рд╛рдзрди рдХрд╡рд░реЗрдЬ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред
рдЧрд┐рддреБрдм рдореЗрдВ рдПрдХ рд╣реНрдпреВрдЧреЛ рдкрд┐рдХрд╛рдбреЛ рд╢рд▓рдЬрдо рд╣реИ - рдореЛрдЯреЛ-рд╕рд░реНрд╡рд░ ред рддреИрдпрд╛рд░ рдЫрд╡рд┐, рд░рди рдФрд░ рдЙрдкрдпреЛрдЧред рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рдмрд╛рдж, рдЕрднреА рддрдХ рд╡рд╣рд╛рдВ рдХреЛрдИ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред

рдЦреИрд░, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред

рдЪреВрдВрдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдпрд╣ рд╕реЗрд╡рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдЪрд░ MOTO_SERVICE рдХреЗ рдЪрд░), рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред

рдЪрд▓рд┐рдП 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 (eg 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 

рд╣рдо рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:



рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо docker-compose.yml рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рд╕рдордп рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:

рдбреЛрдХрд░-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 


рджрд░рдЕрд╕рд▓, рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рд╣реА, рдЖрдк рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж moks рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░реАрдХреНрд╖рдг рджреЗрд╡ * рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдЪрд▓рдиреЗ рдкрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╕рдВрджрд░реНрдн:

рдореЛрдЯреЛрдХрд░ рд░реЗрдкреЛ - github.com/picadoh/motocker
рдореЛрдЯреЛ рд░реЗрдкреЛ - github.com/spulec/moto
Boto3 рдбреЙрдХреНрд╕ - boto3.amazonaws.com/v1/documentation/api/latest/ind.net.html

Source: https://habr.com/ru/post/hi454334/


All Articles