Moretimaxi | Terraform – AWS EC2 tutorial basico paso a paso espanol guia
15395
post-template-default,single,single-post,postid-15395,single-format-standard,ajax_fade,page_not_loaded,,qode-theme-ver-13.7,qode-theme-bridge,wpb-js-composer js-comp-ver-5.4.5,vc_responsive
 

Terraform – AWS EC2 tutorial basico paso a paso espanol guia

Terraform – AWS EC2 tutorial basico paso a paso espanol guia

En este Post veremos un tutorial basico de como crear una instancia de EC2, Ubutu en Aws, proxiamente ire subiendo Post con mas pasos y configuraciones.

En esta Post se da por sentado que ya viste la documentación oficial muy útil para instalar Terraform en su sistema y ponerlo en funcionamiento.

Pueden bajar la solucion en : https://github.com/morettimaxi/Terraform-ec2

 

Explicaremos la estructura basica de TerraForm y que contiene cada archivo

EL proyecto tiene la siguiente estructura

1-ec2-instance/
    - providers.tf
    - main.tf
    - aws_ami.tf
    - variables.tf
    - .gitignore

 .gitignore
# Compilados
*.tfstate
*.tfstate.backup

# Modulos
.terraform/

#Variables privadas
/variables.tf

Es muy importante no comitear y resguardar el archivo variables.tf ya que en el se guardaran las ACCESS KEY a AWS

Variables.tf

# AWS Config

# AWS Config

variable "aws_access_key" {
default = "YOUR_ADMIN_ACCESS_KEY"
}

variable "aws_secret_key" {
default = "YOUR_ADMIN_SECRET_KEY"
}

variable "aws_region" {
default = "us-west-2"
}

Explicación de variables

aws_access_key – ID de clave de acceso que permite que su máquina realice llamadas a la API de AWS.

aws_secret_key – Clave de acceso secreta que se empareja con esa ID de clave de acceso

Nota:

Puedne encontrar su clave de acceso y clave secreta siguiendo los pasos que se detallan aquí .

aws_region– La región en la que está alojada nuestra infraestructura (la estoy usandous-west-2pero puede cambiarla )

 

providers.tf

provider "aws" {
  access_key = "${var.aws_access_key}"
  secret_key = "${var.aws_secret_key}"
  region     = "${var.aws_region}"

  version = "~> 1.7"
}

}

En Terraform, los proveedores son interfaces para los servicios que mantienen nuestros recursos . Por ejemplo: una instancia de EC2 es un recurso proporcionado por el proveedor de servicios web de Amazon . Un repositorio de Git es un recurso proporcionado por el proveedor de Github .

Debido a que Terraform es una herramienta de código abierto, los contribuyentes pueden crear proveedores personalizados para realizar diferentes tareas. Por ahora, nos centraremos exclusivamente en el proveedor de AWS y los recursos que proporciona.

 

aws_ami.tf

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}


Un “DATA” es una vista de solo lectura en datos almacenados fuera de Terraform. Las fuentes de datos disponibles cambiarán en función del proveedor. En este caso, estamos creando una aws_ami con el identificador único de ubuntu.

Por último, es probable que haya múltiples resultados cuando aplicamos todos estos filtros. most_recentseleccionará la más reciente de las AMI posibles y devolverá los atributos de esa para su uso posterior en nuestra configuración de Terraform.

main.tf

Aquí está la parte divertida. La parte que inicializa el servidor. También es sorprendentemente corto:

</pre>
resource "aws_instance" "my-test-instance" {
  ami             = "${data.aws_ami.ubuntu.id}"
  instance_type   = "t2.micro"

  tags {
    Name = "test-instance"
  }
}

output "aws_instance_public_dns" {
    value = "${aws_instance.my-test-instance.public_dns}"
}

  • Estamos definiendo un aws_instance con el identificador de Terraform único demy-test-instance
  • Esa instancia debe usar el AMI encontrado aws_ami.tfpara inicializar el servidor
  • Esa instancia debe ser a t2.micro(el tipo de instancia de AWS más barato)
  • Hemos adjuntado una Nameetiqueta a la instancia test-instance, para una fácil identificación

Creando Recursos

En un Bash ejecutar:

terraform init

Esto descargará e instalará la versión adecuada del proveedor de AWS para su proyecto y lo colocará en un directorio llamado .terraform.

Output:

<code class="rainbow language-bash">Initializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...
- Downloading plugin for provider "aws" (1.7.0)...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.</code> 

Ahora ejecutaremos para ver que tareas realizara el Terraform configurado

terraform Plan

 

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + aws_instance.my-test-instance
      id:                           <computed>
      ami:                          "ami-09bfeda7337019518"
      arn:                          <computed>
      associate_public_ip_address:  <computed>
      availability_zone:            <computed>
      cpu_core_count:               <computed>
      cpu_threads_per_core:         <computed>
      ebs_block_device.#:           <computed>
      ephemeral_block_device.#:     <computed>
      get_password_data:            "false"
      instance_state:               <computed>
      instance_type:                "t2.micro"
      ipv6_address_count:           <computed>
      ipv6_addresses.#:             <computed>
      key_name:                     <computed>
      network_interface.#:          <computed>
      network_interface_id:         <computed>
      password_data:                <computed>
      placement_group:              <computed>
      primary_network_interface_id: <computed>
      private_dns:                  <computed>
      private_ip:                   <computed>
      public_dns:                   <computed>
      public_ip:                    <computed>
      root_block_device.#:          <computed>
      security_groups.#:            <computed>
      source_dest_check:            "true"
      subnet_id:                    <computed>
      tags.%:                       "1"
      tags.Name:                    "test-instance"
      tenancy:                      <computed>
      volume_tags.%:                <computed>
      vpc_security_group_ids.#:     <computed>

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
<pre>

Ahora por ultimo ejecuratemos

 terraform Aply 

Output:

+ aws_instance.my-test-instance
id: <computed>
ami: "ami-1ee65166"
associate_public_ip_address: <computed>
availability_zone: <computed>
ebs_block_device.#: <computed>
ephemeral_block_device.#: <computed>
instance_state: <computed>
instance_type: "t2.micro"
ipv6_address_count: <computed>
ipv6_addresses.#: <computed>
key_name: <computed>
network_interface.#: <computed>
network_interface_id: <computed>
placement_group: <computed>
primary_network_interface_id: <computed>
private_dns: <computed>
private_ip: <computed>
public_dns: <computed>
public_ip: <computed>
root_block_device.#: <computed>
security_groups.#: <computed>
source_dest_check: "true"
subnet_id: <computed>
tags.%: "1"
tags.Name: "test-instance"
tenancy: <computed>
volume_tags.%: <computed>
vpc_security_group_ids.#: <computed>

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Enter a value:
<pre>

Puede escribir yesy presionar Enterpara crear el nuevo servidor.

 

Listo 🙂 ahora ya podras ingresar a AWS y veras que esta creada la isntancia de EC2. mas adelante veremos como cargarle contenido a esta isntancia, crear VPC, ELB .

Importante; Luego correr terraform Destroy para eliminar los recursos creados

Leave a Reply

avatar
  Subscribe  
Notify of