Cloud computing

Imagen Docker para operaciones con EC2

Logo de Docker

He creado una primera versión de imagen en Docker para operaciones en Amazon Web Services. La escribí en Ruby e inicio con ella una serie de imágenes Docker para operaciones. Por ahora, tan solo hace las siguientes operaciones. Si pedimos ayuda al propio script:

Usage: ec2.rb [options]

Available options:
    -r, --region REGION              Supply a region
    -c, --create RELATIVE_PATH       Create the file(s) supplied
        --start INSTANCE[s]-ID       Start the INSTANCE[s]-ID supplied
        --stop INSTANCE[s]-ID        Stop the INSTANCE[s]-ID supplied
    -t, --terminate INSTANCE-ID      Terminate the INSTANCE-ID supplied
    -d, --describe                   Describe EC2 instances in region

    -v, --version                    Show version
    -h, --help                       Show this message

Pueden crearse instancias desde plantillas YAML almacenadas en un directorio. La versión es muy pre-alfa y seguramente irá evolucionando el modo de distribuir las plantillas con los dispositivos. Por ahora, consume cualquier archivo .yml en el directorio suministrado al script como parámetro.

La plantilla de ejemplo que incluyo en la imagen:

---
ec2:
  - instance:
    - params:
      - :image_id: 'ami-8fd760f6'
      - :min_count: '1'
      - :max_count: '1'
      - :key_name: 'name'
      - :security_group_ids: 'sg-00000000'
      - :user_data: ''
      - :instance_type: 't2.micro'
      - :placement:
        - :availability_zone: 'eu-west-1a'
      - :subnet_id: 'subnet-00000000'
      - :tag_specifications:
          - :tags:
            - :key: "Name"
            - :value: "Nom1"
  - instance:
    - params:
      - :image_id: 'ami-8fd760f6'
      - :min_count: '1'
      - :max_count: '1'
      - :key_name: 'name'
      - :security_group_ids: 'sg-00000000'
      - :user_data: ''
      - :instance_type: 't2.micro'
      - :placement:
        - :availability_zone: 'eu-west-1a'
      - :subnet_id: 'subnet-00000000'
      - tag_specifications:
          - :tags:
            - :key: "Name"
            - :value: "Nom2"

Referencia: EC2 Create Instances Method

Las credenciales las toma del directorio ~./aws y hay que montar la carpeta en el contenedor (cualquiera con una sugerencia para hacer la compartición de claves más segura será bienvenido/a).

La imagen Docker está aquí.

Asumiendo que tenemos en el directorio instances al menos una plantilla YAML con datos válidos en el mundo real, desde el contenedor Docker podemos crear las instancias de un modo similar a este:

docker run --rm -ti -v ~/.aws:/root/.aws -v ~/ruby-aws/instances:/ec2/instances gustavomrfz/ec2ops-ruby:0.5.1 ruby ec2.rb --create instances

Otras opciones, más obvias, son una descripción de las instancias en la zona de las credenciales, iniciar, apagar varias instancias y terminar una sóla instancia.

Un libro de Docker

Quiza os resulte útil definir un alias como

alias ec2op="docker run --rm -ti -v ~/.aws:/root/.aws -v ~/ruby-aws/instances:/ec2/instances gustavomrfz/ec2ops-ruby:0.5.1 ruby ec2.rb "

y de este modo simplificar el uso del script en la shell:

ec2op --start id-xxxxxxxxxxxx

Github: //github.com/gustavomrfz/ruby-aws

Docker Hub: //hub.docker.com/r/gustavomrfz/ec2ops-ruby/

Hi, I’m Gustavo Moreno