

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejemplo 9: Uso de Amazon EC2 Instances
<a name="cookbooks-101-basics-ec2"></a>

**importante**  
El AWS OpsWorks Stacks servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los existentes. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tienes preguntas sobre la migración, ponte en contacto con el AWS Support equipo en [AWS Re:post](https://repost.aws/) o a través de Premium [AWS Support](https://aws.amazon.com/support).

Hasta este punto, has estado ejecutando instancias de forma local en. VirtualBox Si bien esto es rápido y fácil, eventualmente querrás probar tus recetas en una EC2 instancia de Amazon. En particular, si desea ejecutar recetas en Amazon Linux, solo está disponible en Amazon EC2. Puede usar un sistema similar, como CentOS, para la implementación y las pruebas preliminares, pero la única forma de probar completamente sus recetas en Amazon Linux es con una instancia de Amazon EC2 . 

En este tema se muestra cómo ejecutar recetas en una EC2 instancia de Amazon. Utilizará Test Kitchen y Vagrant prácticamente de la misma forma que en las secciones anteriores, con dos diferencias: 
+ El controlador es [https://rubygems.org/gems/kitchen-ec2](https://rubygems.org/gems/kitchen-ec2) en lugar de Vagrant.
+ El `.kitchen.yml` archivo del libro de cocina debe estar configurado con la información necesaria para lanzar la EC2 instancia de Amazon.

**nota**  
O bien puede utilizar el complemento de Vagrant `vagrant-aws`. Para obtener más información, consulte [Proveedor de AWS Vagrant](https://github.com/mitchellh/vagrant-aws).

Necesitará las credenciales de AWS para crear una EC2 instancia de Amazon. Si no tiene una cuenta de AWS, puede obtener una tal y como se indica a continuación. 

## Inscríbase en una Cuenta de AWS
<a name="sign-up-for-aws"></a>

Si no tiene uno Cuenta de AWS, complete los siguientes pasos para crearlo.

**Para suscribirte a una Cuenta de AWS**

1. Abrir [https://portal.aws.amazon.com/billing/registro](https://portal.aws.amazon.com/billing/signup).

1. Siga las instrucciones que se le indiquen.

   Parte del procedimiento de registro consiste en recibir una llamada telefónica o mensaje de texto e indicar un código de verificación en el teclado del teléfono.

   Cuando te registras en un Cuenta de AWS, *Usuario raíz de la cuenta de AWS*se crea un. El usuario raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica recomendada de seguridad, asigne acceso administrativo a un usuario y utilice únicamente el usuario raíz para realizar [Tareas que requieren acceso de usuario raíz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS te envía un correo electrónico de confirmación una vez finalizado el proceso de registro. En cualquier momento, puede ver la actividad de su cuenta actual y administrarla accediendo a [https://aws.amazon.com/](https://aws.amazon.com/)y seleccionando **Mi cuenta**.

## Creación de un usuario con acceso administrativo
<a name="create-an-admin"></a>

Después de crear un usuario administrativo Cuenta de AWS, asegúrelo Usuario raíz de la cuenta de AWS AWS IAM Identity Center, habilite y cree un usuario administrativo para no usar el usuario root en las tareas diarias.

**Proteja su Usuario raíz de la cuenta de AWS**

1.  Inicie sesión [Consola de administración de AWS](https://console.aws.amazon.com/)como propietario de la cuenta seleccionando el **usuario root** e introduciendo su dirección de Cuenta de AWS correo electrónico. En la siguiente página, escriba su contraseña.

   Para obtener ayuda para iniciar sesión con el usuario raíz, consulte [Iniciar sesión como usuario raíz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) en la *Guía del usuario de AWS Sign-In *.

1. Active la autenticación multifactor (MFA) para el usuario raíz.

   Para obtener instrucciones, consulte [Habilitar un dispositivo MFA virtual para el usuario Cuenta de AWS raíz (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) en la Guía del usuario de *IAM*.

**Creación de un usuario con acceso administrativo**

1. Activar IAM Identity Center.

   Consulte las instrucciones en [Activar AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html) en la *Guía del usuario de AWS IAM Identity Center *.

1. En IAM Identity Center, conceda acceso administrativo a un usuario.

   Para ver un tutorial sobre su uso Directorio de IAM Identity Center como fuente de identidad, consulte [Configurar el acceso de los usuarios con la configuración predeterminada Directorio de IAM Identity Center en la](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html) Guía del *AWS IAM Identity Center usuario*.

**Inicio de sesión como usuario con acceso de administrador**
+ Para iniciar sesión con el usuario de IAM Identity Center, use la URL de inicio de sesión que se envió a la dirección de correo electrónico cuando creó el usuario de IAM Identity Center.

  Para obtener ayuda para iniciar sesión con un usuario del Centro de identidades de IAM, consulte [Iniciar sesión en el portal de AWS acceso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) en la *Guía del AWS Sign-In usuario*.

**Concesión de acceso a usuarios adicionales**

1. En IAM Identity Center, cree un conjunto de permisos que siga la práctica recomendada de aplicar permisos de privilegios mínimos.

   Para conocer las instrucciones, consulte [Create a permission set](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-a-permission-set.html) en la *Guía del usuario de AWS IAM Identity Center *.

1. Asigne usuarios a un grupo y, a continuación, asigne el acceso de inicio de sesión único al grupo.

   Para conocer las instrucciones, consulte [Add groups](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) en la *Guía del usuario de AWS IAM Identity Center *.

Debe [crear un usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) con permisos para acceder a Amazon EC2 y guardar las claves secretas y de acceso del usuario en una ubicación segura de su estación de trabajo. Test Kitchen utilizará estas credenciales para crear la instancia. La mejor manera de proporcionar credenciales para Test Kitchen consiste en asignar las claves a las variables de entorno siguientes en su estación de trabajo.

**aviso**  
Los usuarios de IAM tienen credenciales de larga duración, lo que supone un riesgo de seguridad. Para ayudar a mitigar este riesgo, le recomendamos que brinde a estos usuarios únicamente los permisos que necesitan para realizar la tarea y que los elimine cuando ya no los necesiten.
+ AWS\$1ACCESS\$1KEY — la clave de acceso de su usuario, que tendrá un aspecto similar. AKIAIOSFODNN7EXAMPLE
+ AWS\$1SECRET\$1KEY — la clave secreta de tu usuario, que tendrá un aspecto similarwJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

Este enfoque reduce las posibilidades de poner en peligro accidentalmente su cuenta, por ejemplo, cargando un proyecto que contenga sus credenciales en un repositorio público.

**Para configurar el libro de recetas**

1. Para utilizar el controlador `kitchen-ec2`, debe tener el paquete `ruby-dev` instalado en el sistema. El siguiente comando de ejemplo muestra cómo utilizar `aptitude` para instalar el paquete en un sistema Ubuntu. 

   ```
   sudo aptitude install ruby1.9.1-dev 
   ```

1. El controlador `kitchen-ec2` es un gem, que puede instalar de la siguiente manera:

   ```
   gem install kitchen-ec2
   ```

   En función de la estación de trabajo, este comando puede necesitar `sudo`, o puede utilizar un administrador de entornos de Ruby, como [RVM](https://rvm.io/). Este procedimiento se probó con la versión 0.8.0 del controlador `kitchen-ec2`, pero existen versiones más actuales. Para instalar una [versión específica](https://rubygems.org/gems/kitchen-ec2/versions), ejecute `gem install kitchen-ec2 -v <version number>`.

1. Debes especificar un par de claves Amazon EC2 SSH que Test Kitchen pueda usar para conectarse a la instancia. Si no tienes un par de EC2 claves de Amazon, consulta [Amazon EC2 Key Pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) para obtener información sobre cómo crear uno. Tenga en cuenta que el par de claves debe pertenecer a la misma región de AWS que la instancia. En el ejemplo se usa la región Oeste de EE. UU. (Norte de California).

   Una vez que haya seleccionado un par de claves, cree un subdirectorio de `opsworks_cookbooks` denominado `ec2_keys` y copie el archivo de clave privada (`.pem`) del par de claves en dicho subdirectorio. Tenga en cuenta que colocar la clave privada en `ec2_keys` es cómo ya que simplifica en parte el código; puede estar en cualquier lugar del sistema.

1. Cree un subdirectorio de `opsworks_cookbooks` llamado `createdir-ec2` y ábralo.

1. Añada un archivo `metadata.rb` a `createdir-ec2` con el contenido siguiente.

   ```
   name "createdir-ec2"
   version "0.1.0"
   ```

1. Inicialice Test Kitchen, tal y como se describe en [Ejemplo 1: Instalación de paquetes](cookbooks-101-basics-packages.md). En la siguiente sección, se describe cómo configurarlo`.kitchen.yml`, lo cual es mucho más complicado para EC2 las instancias de Amazon.

1. Añada un subdirectorio `recipes` a `createdir-ec2`.

## Configuración de .kitchen.yml para Amazon EC2
<a name="w2ab1c14c71b9c15c17c31c37"></a>

Se configura `.kitchen.yml` con la información que el `kitchen-ec2` controlador necesita para lanzar una EC2 instancia de Amazon configurada adecuadamente. A continuación, se muestra un ejemplo de un archivo `.kitchen.yml` para una instancia de Amazon Linux en la región Oeste de EE. UU. (Norte de California).

```
driver:
  name: ec2
  aws_ssh_key_id: US-East1
  region: us-west-1
  availability_zone: us-west-1c
  require_chef_omnibus: true
  security_group_ids: sg........
  subnet_id: subnet-.........
  associate_public_ip: true
  interface: dns

provisioner:
  name: chef_solo

platforms:
  -name: amazon
  driver:
    image_id: ami-xxxxxxxx
  transport:
    username: ec2-user
    ssh_key: ../ec2_keys/US-East1.pem

suites:
  - name: default
    run_list:
      - recipe[createdir-ec2::default]
    attributes:
```

Puede utilizar la configuración predeterminada para las secciones `provisioner` y `suites`, pero debe modificar las opciones `driver` y `platforms` predeterminadas. Este ejemplo utiliza una lista mínima de valores y acepta los valores predeterminados para el resto. Para obtener una lista completa de los `kitchen-ec2` ajustes, consulta [Kitchen: :Ec2: A Test Kitchen Driver for Amazon](https://github.com/test-kitchen/kitchen-ec2). EC2

El ejemplo establece los siguientes atributos de `driver`. Se parte de la base de que ha asignado las claves secretas y de acceso de usuario a las variables de entorno estándar, tal y como se ha comentado anteriormente. De forma predeterminada, el controlador utiliza dichas claves. Si no es así, debe especificar de forma explícita las claves añadiendo `aws_access_key_id` y `aws_secret_access_key` a los atributos `driver`, establecidos en los valores de clave apropiados.

**name**  
(Obligatorio) Este atributo debe establecerse en `ec2`.

**aws\$1ssh\$1key\$1id**  
(Obligatorio) El nombre del key pair de Amazon EC2 SSH, que se menciona `US-East1` en este ejemplo. 

**transport.ssh\$1key**  
(Obligatorio) El archivo de claves privadas (`.pem`) de la clave que ha especificado para `aws_ssh_key_id`. En este ejemplo, el archivo se llama `US-East1.pem` y se encuentra en el directorio `../opsworks/ec2_keys`.

**region**  
(Obligatorio) La región de AWS de la instancia. En el ejemplo se utiliza Oeste de EE. UU. (Norte de California, que se representa con `us-west-1`).

**availability\$1zone**  
(Opcional) La zona de disponibilidad de la instancia. Si omite esta opción, Test Kitchen utiliza una zona de disponibilidad predeterminada para la región especificada, que es `us-west-1b` para Oeste de EE. UU. (Norte de California). Sin embargo, es posible que la zona predeterminada no esté disponible para su cuenta. En dicho caso, debe especificar explícitamente una zona de disponibilidad. La cuenta utilizada para preparar los ejemplos no admite `us-west-1b`, por lo que el ejemplo especifica explícitamente `us-west-1c`.

**require\$1chef\$1omnibus**  
Cuando esta opción está establecida en `true`, se garantiza el uso del instalador ómnibus para instalar `chef-client` en todas las instancias de la plataforma.

**security\$1group\$1ids**  
(Opcional) Una lista de los grupos de seguridad IDs que se van a aplicar a la instancia. Esta opción aplica el grupo de seguridad `default` a la instancia. Asegúrese de que las reglas de entrada del grupo de seguridad permitan conexiones SSH de entrada, de lo contrario, Test Kitchen no podrá comunicarse con la instancia. Si utiliza el grupo de seguridad `default`, es posible que necesite editarlo para adaptarlo. Para obtener más información, consulte [Amazon EC2 Security Groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html).

**subnet\$1id**  
El ID de la subred de destino de la instancia, si procede.

**associate\$1public\$1ip**  
Puedes hacer que Amazon EC2 asocie una dirección IP pública a la instancia si quieres poder acceder a la instancia desde Internet.

**interface**  
El tipo de configuración del nombre de host que utiliza para obtener acceso a la instancia. Los valores válidos son `dns`, `public`, `private` o `private_dns`. Si no especifica un valor para este atributo, `kitchen-ec2` configura el nombre de host en el orden siguiente. Si omite este atributo, el tipo de configuración no se establecerá.  

1. Nombre de DNS

1. Dirección IP pública

1. Dirección IP privada

1. Nombre de DNS privado

**importante**  
En lugar de utilizar las credenciales de su cuenta para el acceso y las claves secretas, cree un usuario para proporcionar dichas credenciales a Test Kitchen. Para obtener más información, consulte [Prácticas recomendadas para administrar las claves de acceso de AWS](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).  
Ten cuidado de no colocarla `.kitchen.yml` en una ubicación de acceso público, como subirla a un repositorio público GitHub o de Bitbucket. Si lo hiciera, expone las credenciales y podría poner en peligro la seguridad de su cuenta.

El controlador `kitchen-ec2` es compatible de forma predeterminada con las plataformas siguientes:
+ ubuntu-10.04
+ ubuntu-12.04
+ ubuntu-12.10
+ ubuntu-13.04
+ ubuntu-13.10
+ ubuntu-14.04
+ centos-6.4
+ debian-7.1.0
+ windows-2012r2
+ windows-2008r2

Si quiere utilizar una o varias plataformas, añada los nombres de plataforma pertinentes a `platforms`. El controlador `kitchen-ec2` selecciona automáticamente una AMI adecuada y genera un nombre de usuario SSH adecuado. Puede utilizar otras plataformas (este ejemplo utiliza Amazon Linux), pero debe especificar de forma explícita los siguientes atributos `platforms`.

**name**  
El nombre de la plataforma. En este ejemplo se utiliza Amazon Linux, por lo que `name` está establecido en `amazon`.

**controlador**  
Los atributos `driver`, que contienen la información siguiente:  
+ `image_id`: la AMI de la plataforma, que debe pertenecer a la región especificada. El ejemplo utiliza `ami-ed8e9284`, una AMI de Amazon Linux de la región Oeste de EE. UU. (Norte de California).
+ `transport.username`: el nombre de usuario de SSH que Test Kitchen utilizará para comunicarse con la instancia.

  Utilice `ec2-user` para Amazon Linux. Otras AMIs pueden tener nombres de usuario diferentes.

Cambie el código de `.kitchen.yml` por el ejemplo y asigne valores adecuados a los atributos específicos de la cuenta como `aws_access_key_id`.

## Ejecución de la receta
<a name="w2ab1c14c71b9c15c17c31c39"></a>

En este ejemplo se utiliza la receta de [Iteración](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-iteration).

**Para ejecutar la receta**

1. Cree un archivo denominado `default.rb` con el siguiente código y guárdelo en la carpeta `recipes` del libro de recetas.

   ```
   directory "/srv/www/shared" do
     mode 0755
     owner 'root'
     group 'root'
     recursive true
     action :create
   end
   ```

1. Ejecute `kitchen converge` para ejecutar la receta. Ten en cuenta que este comando tardará más en completarse que en los ejemplos anteriores debido al tiempo necesario para lanzar e inicializar una EC2 instancia de Amazon.

1.  Ve a la [ EC2consola de Amazon](https://console.aws.amazon.com/ec2/), selecciona la región EE.UU. Oeste (Norte de California) y haz clic en **Instancias** en el panel de navegación. Verá la instancia recién creada en la lista. 

1. Ejecute `kitchen login` para iniciar sesión en la instancia, tal como lo ha estado haciendo con las instancias en ejecución VirtualBox. Verá los directorios recién creados en `/srv`. También puede utilizar su cliente de SSH preferido para conectarse a la instancia.