Supongamos que mi amigo me ha dado su dirección BTC de depósito, que dicho sea de paso, es pública

1JjzZ4jV7DofjBrpResHNVAM2neyHbgrNj

1) Crear una nueva transaccion

bitcoin-cli createrawtransaction '[]' '{"1JjzZ4jV7DofjBrpResHNVAM2neyHbgrNj": 0.0025}'

response:

02000000000190d00300000000001976a914c29ba6c282f49e27a62c2b4b20db49b6f6f1bff088ad00000000

2) Fondear la transaccion creada

bitcoin-cli fundrawtransaction 02000000000190d00300000000001976a914c29ba6c282f49e27a62c2b4b20db49b6f6f1bff088ad00000000 '{"changeAddress": "1FxheDG9WGFWqZNx1iYdUjzrUwXpMm1Tbm"}'

response:

{
  "hex": "02000000019765371867474687d56c80309796eef78da477be4159fd7eeddbd1d9e70290a10100000000feffffff0290d00300000000001976a914c29ba6c282f49e27a62c2b4b20db49b6f6f1bff088ac91380200000000001976a914a41a90937a12d31015d534deba4bcd22fdd4572e88ad00000000",
  "changepos": 1,
  "fee": 0.00001141
}

3) Firmar la transaccion firmada

bitcoin-cli signrawtransaction 02000000019765371867474687d56c80309796eef78da477be4159fd7eeddbd1d9e70290a10100000000feffffff0290d00300000000001976a914c29ba6c282f49e27a62c2b4b20db49b6f6f1bff088ac91380200000000001976a914a41a90937a12d31015d534deba4bcd22fdd4572e88ad00000000

response:

{
  "hex": "02000000019765371867474687d56c80309796eef78da477be4159fd7eeddbd1d9e70290a1010000006a4730440220108f6e4023a005ad06ea970f24974157064448cf0b06711857ecba6ff8ee288602202bda4122ea4fddb5668f5a4a4f6971ca14d43f95d8524b88a06c5b540dab841f0121027326b49fd65f9ef1fa6d6e77fa1c9da01914d7acc7e38aa2d8e521480fd18b91feffffff0290d00300000000001976a914c29ba6c282f49e27a62c2b4b20db49b6f6f1bff088ac91380200000000001976a914a41a90937a12d31015d534deba4bcd22fdd4572e88ad00000000",
  "complete": true
}

4) Enviar la transaccion firmada

bitcoin-cli sendrawtransaction 02000000019765371867474687d56c80309796eef78da477be4159fd7eeddbd1d9e70290a1010000006a4730440220108f6e4023a005ad06ea970f24974157064448cf0b06711857ecba6ff8ee288602202bda4122ea4fddb5668f5a4a4f6971ca14d43f95d8524b88a06c5b540dab841f0121027326b49fd65f9ef1fa6d6e77fa1c9da01914d7acc7e38aa2d8e521480fd18b91feffffff0290d00300000000001976a914c29ba6c282f49e27a62c2b4b20db49b6f6f1bff088ac91380200000000001976a914a41a90937a12d31015d534deba4bcd22fdd4572e88ad00000000

response:

c66c42320de78bf7437d1be4d31eb58069aa5d568ce628ab0d7ea04751123dd5

Checar status en

https://blockchain.info
Usando la dirección de depósito inicial: 1JjzZ4jV7DofjBrpResHNVAM2neyHbgrNj

Nota Importante:

Si el BTC está a 200k, entonces el “fee” de 0.00001141 es aproximadamente 2 pesos con 30 centavos.
Eso fue lo que me costó mandar 0.0025 btc = 500 pesitos de mi cartera a otra cartera

Este post está dedicado a ejemplificar cómo logré automatizar la creación de instancias de EC2 con un script Ansible.

Primeramente, realicemos algunas actividades de rutina:

    1  sudo nano /etc/hosts
    2  sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
    3  sudo apt-get update 
    4  sudo apt-get install ansible
    5  sudo apt-get install python-pip
    6  pip install -U boto
    7  nano  ~/.boto

El archivo .boto debe contener la access_key_id y la secret_access_key obtenidas de AWS y terminará viéndose mas o menos asi:

[Credentials]
aws_access_key_id = AK1AK3KG3SWPY67RTHIQ
aws_secret_access_key =  TbYfgMzkXb35vyZG6EfgUk62gP425vF8XgAbZ1M+    

Favor de usar SUS PROPIAS credenciales, ya que las que puse NO son reales.

El archivo ~/.ansible.cfg debe contener lo siguiente:

[defaults]
host_key_checking = False    

Ahora, vamos a crear un directorio llamado asi: /home/gustavo/prueba-ansible-aws/ con el siguiente contenido:

.
|-- ec2_vars
|   `-- webservers.yml
|-- meta.pem
|-- provision-ec2.yml
`-- roles
    `-- provision-ec2
        `-- tasks
            |-- main-original.yml
            `-- main.yml    

El archivo ec2_vars/webservers.yml se debe ver asi:

ec2_keypair: "meta"
ec2_security_group: "sg-fbb77f8b"
ec2_instance_type: "t2.micro"
ec2_image: "ami-40d28157"
ec2_subnet_ids: ['subnet-9fa80ce9','subnet-390df813']
ec2_region: "us-east-1"
ec2_tag_Name: "Webserver"
ec2_tag_Type: "webserver"
ec2_tag_Environment: "production"
ec2_volume_size: 16

Usar sus propios datos, ya que estos son sólo de prueba.

El archivo provision-ec2.yml se debe ver asi:

---
 - hosts: localhost
   connection: local
   gather_facts: false
   user: root
   pre_tasks:
    - include_vars: ec2_vars/{{type}}.yml
   roles:
    - provision-ec2

 - hosts: launched
   name: Pre-instalaciones... Incluye Python y variables de lenguaje
   gather_facts: false
   pre_tasks:
     - raw: sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
     - raw: sudo apt-get update 
     - raw: sudo apt-get -y install python
     - raw: wget -qO- https://get.docker.com/ | sh   
     - raw: sudo gpasswd -a ubuntu docker

 - hosts: launched
   name: Instalando Servidor de Apache
   gather_facts: true
   user: ubuntu
   sudo: yes
   tasks:
     - name: Install apache2
       apt: name=apache2 state=latest
     - raw: docker pull gustavoarellano/jdk18

Los tasks que mandé ejecutar remotamente pueden ser otros.
Yo, a manera de ejemplo, instalé doker, apache y bajé una imagen de docker que tiene java 1.8

El archivo roles/provision-ec2/tasks/main.yml se debe ver así:

---
 - name: Provision EC2 Box
   local_action:
     module: ec2
     key_name: "{{ ec2_keypair }}"
     group_id: "{{ ec2_security_group }}"
     instance_type: "{{ ec2_instance_type }}"
     image: "{{ ec2_image }}"
     vpc_subnet_id: "{{ ec2_subnet_ids|random }}"
     region: "{{ ec2_region }}"
     instance_tags: '{"Name":"{{ec2_tag_Name}}","Type":"{{ec2_tag_Type}}","Environment":"{{ec2_tag_Environment}}"}'
     assign_public_ip: yes
     wait: true
     count: 1
     volumes:
     - device_name: /dev/sda1
       device_type: gp2
       volume_size: "{{ ec2_volume_size }}"
       delete_on_termination: true
   register: ec2

 - debug: var=item
   with_items: ec2.instances

 - add_host: hostname={{ item.public_ip }} groupname=launched 
   with_items: ec2.instances

 - name: Wait for the instances to boot by checking the ssh port
   wait_for: host={{item.public_ip}} port=22 delay=60 timeout=320 state=started
   with_items: ec2.instances     

Y listo !!!!!
Ya podemos correr nuestro playbook de esta manera:

ansible-playbook -vv -i localhost, -e "type=webservers" provision-ec2.yml

Por cierto, es posible usar 4 “v” asi: -vvvv para obtener mas info.

Cheers,
Gus

© 2019 Goose Workshop Suffusion theme by Sayontan Sinha