Tutorial: procedimiento de creación de un servidor web básico con AWS CloudFormation Designer - AWS CloudFormation

Tutorial: procedimiento de creación de un servidor web básico con AWS CloudFormation Designer

Application Composer en modo consola de CloudFormation es una mejora respecto al Diseñador de AWS CloudFormation. Recomendamos utilizar Application Composer en lugar del Diseñador siempre que sea posible. Para obtener más información, consulte Uso de Application Composer para crear plantillas visualmente.

El Diseñador de AWS CloudFormation representa de manera gráfica sus plantillas para ayudarlo a ver los recursos de la plantilla y sus conexiones. El editor de JSON y YAML integrado facilitan la tarea de modificar plantillas directamente en la consola de AWS CloudFormation. Para demostrar cómo utilizar ambos componentes, utilizaremos AWS CloudFormation Designer para crear un servidor web básico en una VPC. A continuación, guardaremos la plantilla y la utilizaremos para crear una pila de CloudFormation.

En el tutorial, realizará los siguientes pasos:

  1. Añadir y conectar recursos.

    La primera vez que abra AWS CloudFormation Designer comienza con una plantilla en blanco. Usaremos AWS CloudFormation Designer para comenzar a rellenar la plantilla arrastrando los recursos como, por ejemplo, una VPC y una instancia de EC2 a su plantilla. También crearemos enlaces entre ellas. Por ejemplo, usaremos AWS CloudFormation Designer para crear una conexión entre la puerta de enlace de Internet y la VPC.

  2. Añadir parámetros, mapeos y salidas de la plantilla.

    Usaremos el editor integrado de AWS CloudFormation Designer para agregar otros componentes de plantilla para que esta sea más útil. Por ejemplo, añadiremos parámetros a la plantilla, lo que le permitirá especificar valores de entrada al crear una pila. De esta forma no tiene que editar constantemente los valores de la propiedad de la plantilla que podría cambiar habitualmente.

  3. Especificar las propiedades de los recursos.

    Utilizaremos editor integrado de nuevo para especificar los ajustes de configuración para nuestros recursos.

  4. Aprovisionar recursos

    Ninguno de sus recursos de plantillas está operativo hasta que crea una pila. Utilizaremos la plantilla que acaba de crear para lanzar una pila de CloudFormation, que aprovisionará todos los recursos que se definen en la plantilla.

    nota

    CloudFormation es un servicio gratuito; no obstante, se le cobrará por los recursos de AWS que incluya en sus pilas a la tarifa actual para cada uno. Para obtener más información sobre los precios de AWS, consulte la página de detalles correspondiente a cada producto en http://aws.amazon.com.

Requisitos previos

Esta explicación presupone que está familiarizado con Amazon Virtual Private Cloud (Amazon VPC), Amazon Elastic Compute Cloud (Amazon EC2) y CloudFormation. Cada procedimiento proporciona algo de información básica de contexto sobre cada recurso.

Además, antes de empezar, compruebe que tiene un par de claves de Amazon EC2 en la región en la que esté creando la pila. Para obtener más información, consulte Pares de claves de Amazon EC2 en la Guía del usuario de Amazon EC2.

Paso 1: Añadir y conectar recursos

Usaremos la interfaz de arrastrar y soltar de AWS CloudFormation Designer para agregar una instancia de Amazon EC2 y recursos de red, como, por ejemplo, una VPC, una subred, una tabla de enrutamiento y la puerta de enlace de Internet. Una vez que se hayan añadido todos los recursos, crearemos conexiones entre ellos. Por ejemplo, asociaremos la gateway de Internet con una VPC.

Para añadir recursos a una plantilla
  1. Abra AWS CloudFormation Designer en https://console.aws.amazon.com/cloudformation/designer.

  2. En el editor integrado, en la mitad inferior de la página, seleccione Edit (Editar) ( ).

  3. Cambie el nombre de la plantilla BasicWebServerInVPC y, a continuación, pulse Intro.

    En la actualidad, tenemos una plantilla en blanco que no es válida. En los próximos pasos, añadiremos recursos para que sea válida.

  4. En el panel Resource types (Tipos de recursos), desde la categoría EC2, arrastre un tipo de recurso VPC hacia el panel Canvas (Lienzo).

    Los recursos están organizados por categorías de recursos. Todos los recursos que estamos añadiendo se encuentran en la categoría EC2.

    AWS CloudFormation Designer modifica inmediatamente la plantilla para incluir un recurso de VPC, con unos resultados que tienen un aspecto similar al siguiente fragmento de código JSON.

    "Resources": { "VPC431KO": { "Type": "AWS::EC2::VPC", "Properties": {}, "Metadata": { "AWS::CloudFormation::Designer": { "id": "445730ea-0d11-45ba-b6ac-12345EXAMPLE" } } } }

    El fragmento de código YAML tiene un aspecto similar al siguiente.

    Resources: VPC431KO: Type: 'AWS::EC2::VPC' Properties: {} Metadata: 'AWS::CloudFormation::Designer': id: 9430b008-7a03-41ed-b63e-12345EXAMPLE

    Tenga en cuenta que todavía tiene que especificar las propiedades de VPC, como el bloque de CIDR de la VPC. Lo haremos más adelante. Esto es válido para todos los recursos que vamos a añadir.

  5. Cambie el nombre de la VPC.

    nota

    Al cambiar el nombre de un recurso, cambia el nombre de su ID lógico, que es el nombre al que se hace referencia en la plantilla (no el nombre asignado cuando CloudFormation crea el recurso). Para obtener más información, consulte Recursos.

    1. Elija el recurso de VPC.

    2. En el editor integrado, elija el icono Edit (Editar) ( ).

    3. Cambie el nombre a VPC y, a continuación, elija Intro.

    A continuación, añadiremos recursos a la VPC.

  6. Arrastre una esquina del recurso de VPC para ampliarla para que sea lo suficientemente grande como para que quepan varios recursos más.

    Tenemos que añadir una subred porque no es posible añadir una instancia de EC2, que aloja el sitio web, directamente en la VPC; las instancias deben estar en una subred.

  7. Añada un tipo de recurso Subnet dentro de la VPC y cámbiele el nombre por PublicSubnet.

    Usaremos la subred para asignar un rango de direcciones IP de la VPC que puede asociar con otros recursos de AWS, como una instancia de Amazon EC2.

    Cuando agrega la subred dentro de la VPC, AWS CloudFormation Designer asocia automáticamente la subred con la VPC. Esta asociación es un modelo de contenedor, donde los recursos dentro del contenedor se asocian automáticamente con los recursos de contenedor.

  8. Añada un tipo de recurso Instance dentro del recurso PublicSubnet y cámbiele el nombre por WebServerInstance.

    La instancia es un entorno informático virtual, donde podrá alojar un sitio web básico. De forma similar a la forma en que esto funcionó con la subred y la VPC, la adición de la instancia en la subred asocia automáticamente la instancia con la subred.

  9. Añada un tipo de recurso SecurityGroup dentro de la VPC y cámbiele el nombre por WebServerSecurityGroup.

    El grupo de seguridad es un firewall virtual que controla el tráfico entrante y saliente de la instancia del servidor web. También es necesario para las instancias de una VPC. Tendremos que asociar la instancia de servidor web con este grupo de seguridad, lo cual haremos más adelante cuando especifiquemos las propiedades de la instancia.

  10. Añada un tipo de recurso InternetGateway en cualquier lugar fuera de la VPC y cámbiele el nombre por InternetGateway.

    La gateway de Internet permite la comunicación entre la instancia que está dentro de la VPC e Internet. Sin la gateway de Internet, nadie puede obtener acceso a su sitio web.

    Aunque puede arrastrar la gateway de Internet dentro de la VPC, esto no crea una asociación con la VPC. La gateway de Internet no sigue el modelo de contenedores; en su lugar, debe arrastrar una conexión de la gateway de Internet a la VPC, tal y como se describe en el siguiente paso.

  11. Cree una conexión entre el recurso InternetGateway y el recurso VPC.

    1. En el recurso InternetGateway, coloque el cursor sobre la vinculación de la gateway de Internet (AWS::EC2::VPCGatewayAttachment).

    2. Arrastre una conexión a la VPC.

      El borde de los recursos de destino válidos cambia de color. En este caso, la VPC es el único recurso de destino válido. Esta conexión crea un recurso de vinculación que asocia la gateway de Internet a la VPC.

  12. A continuación, tenemos que añadir una tabla de ruteo y una ruta para especificar cómo dirigir el tráfico de la red desde una subred. Añada una RouteTable dentro de la VPC y cámbiele el nombre por PublicRouteTable.

    Esto asocia una nueva tabla de ruteo con la VPC.

  13. Para añadir una regla de enrutamiento en la tabla de ruteo, añada un tipo de recurso Route dentro del recurso PublicRouteTable y cámbiele el nombre por PublicRoute.

    Utilizaremos la ruta para especificar hacia dónde dirigir el tráfico.

  14. Para la ruta pública, queremos que la gateway de Internet sea el destino. Utilice GatewayId para crear una conexión desde el recurso PublicRoute a la gateway de Internet, similar a la forma en que ha creado una conexión entre la gateway de Internet y la VPC.

    CloudFormation no puede asociar una ruta con una gateway de Internet hasta que se asocia la gateway de Internet a la VPC. Esto significa que tenemos que crear una dependencia explícita en la vinculación gateway de Internet-VPC, tal y como se describe en el siguiente paso. Para obtener más información, consulte Atributo DependsOn.

  15. Cree una dependencia explícita entre el recurso PublicRoute y la vinculación gateway de Internet-VPC.

    1. En el recurso PublicRoute, pase el ratón por encima del punto DependsOn.

    2. Arrastre una conexión a la vinculación gateway de Internet-VPC (AWS::EC2::VPCGatewayAttachment).

      Con conexiones DependsOn, AWS CloudFormation Designer crea una dependencia (un atributo DependsOn), donde el recurso de origen depende del recurso de destino. En este caso, AWS CloudFormation Designer agrega un atributo DependsOn para el recurso PublicRoute y especifica la vinculación entre la puerta de enlace y la VPC como una dependencia.

  16. Cree otra dependencia desde el recurso WebServerInstance al recurso PublicRoute.

    El recurso WebServerInstance depende de la ruta pública para dirigir el tráfico a través de Internet. Sin la ruta pública, la instancia no puede enviar una señal (utilizando el script de la aplicación auxiliar cfn-signal) para informar a CloudFormation cuando se completan la configuración de la instancia y las implementaciones de la aplicación.

  17. Arrastre una conexión desde el recurso PublicRouteTable al recurso PublicSubnet para asociar la tabla de ruteo y la subred.

    Ahora la subred pública utilizará la tabla de ruteo público para dirigir el tráfico.

  18. En la barra de herramientas de AWS CloudFormation Designer guarde la plantilla localmente mediante el menú File (Archivo) (el icono de archivo).

    AWS CloudFormation Designer guarda la plantilla en el disco duro. Puede utilizar la plantilla más tarde para crear una pila. Le recomendamos que guarde la plantilla periódicamente para evitar perder cambios.

En este paso, hemos añadido siete recursos a su plantilla y cambiado el nombre de sus ID lógico por nombres fáciles de recordar. También hemos establecido conexiones visuales con la mayoría de los recursos para crear asociaciones y una dependencia. Sin embargo, para poder crear una pila con esta plantilla, tenemos que crear algunas conexiones más (como, por ejemplo, la asociación de la instancia con el grupo de seguridad) y especificar propiedades para cada recurso. En el siguiente paso, repasaremos cómo modificar otros componentes de la plantilla, como parámetros de entrada, mediante el editor integrado de AWS CloudFormation Designer.

Paso 2: Añadir parámetros, asignaciones y salidas

Antes de especificar las propiedades de los recursos, tenemos que añadir otros componentes de plantilla para que resulte más fácil reutilizar la plantilla en diferentes entornos. En este paso, vamos a utilizar el editor integrado de AWS CloudFormation Designer para agregar parámetros, asignaciones y salidas. A continuación, podemos consultar estos parámetros y mapeos al especificar las propiedades de los recursos. El tutorial incluye ejemplos de JSON y YAML que puede utilizar para copiar y pegar en editor integrado.

Para añadir parámetros

Los parámetros son valores de entrada que especifica al crear una pila. Son útiles para transferir valores para no tener valores codificados de forma rígida en plantillas. Por ejemplo, no es necesario codificar de manera rígida el tipo de instancia del servidor web en la plantilla; en su lugar, puede utilizar un parámetro para especificar el tipo de instancia al crear una pila. De esta forma, puede utilizar la misma plantilla para crear varios servidores web con diferentes tipos de instancias. Para obtener más información, consulte Parámetros.

  1. Haga clic en una zona abierta en el lienzo de AWS CloudFormation Designer.

    En función de lo que haya seleccionado, editor integrado muestra componentes de nivel de plantilla o de nivel de recursos que puede editar. En el nivel de la plantilla, puede editar el resto de secciones de una plantilla, como, por ejemplo, los parámetros, mapeos y salidas de la plantilla, excepto la sección Resources. En el nivel de recursos, puede editar las propiedades de recursos y atributos.

    Al hacer clic en una zona abierta en el canvas esto le permite editar los componentes de nivel de plantilla. Para editar los componentes de nivel de recursos, seleccione un recurso.

  2. En el panel de editor integrado, elija la pestaña Parameters (Parámetros) en la vista Components (Componentes).

  3. Copie los parámetros en el siguiente fragmento de código y péguelos en editor integrado.

    El siguiente fragmento de código JSON añade parámetros para especificar el tipo de instancia del servidor web, un nombre de par de claves de Amazon EC2 para acceso de SSH al servidor web y el rango de direcciones IP que se puede utilizar para obtener acceso al servidor web mediante SSH.

    { "Parameters": { "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", "AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge", "i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge", "hi1.4xlarge", "hs1.8xlarge", "cr1.8xlarge", "cc2.8xlarge", "cg1.4xlarge" ], "ConstraintDescription" : "must be a valid EC2 instance type." }, "KeyName": { "Description": "Name of an EC2 KeyPair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription": "must be the name of an existing EC2 KeyPair." }, "SSHLocation": { "Description": " The IP address range that can be used to access the web server using SSH.", "Type": "String", "MinLength": "9", "MaxLength": "18", "Default": "0.0.0.0/0", "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})", "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." } } }

    A continuación se muestra el mismo fragmento de código en YAML.

    Parameters: InstanceType: Description: WebServer EC2 instance type Type: String Default: t2.small AllowedValues: - t1.micro - t2.nano - t2.micro - t2.small - t2.medium - t2.large - m1.small - m1.medium - m1.large - m1.xlarge - m2.xlarge - m2.2xlarge - m2.4xlarge - m3.medium - m3.large - m3.xlarge - m3.2xlarge - m4.large - m4.xlarge - m4.2xlarge - m4.4xlarge - m4.10xlarge - c1.medium - c1.xlarge - c3.large - c3.xlarge - c3.2xlarge - c3.4xlarge - c3.8xlarge - c4.large - c4.xlarge - c4.2xlarge - c4.4xlarge - c4.8xlarge - g2.2xlarge - g2.8xlarge - r3.large - r3.xlarge - r3.2xlarge - r3.4xlarge - r3.8xlarge - i2.xlarge - i2.2xlarge - i2.4xlarge - i2.8xlarge - d2.xlarge - d2.2xlarge - d2.4xlarge - d2.8xlarge - hi1.4xlarge - hs1.8xlarge - cr1.8xlarge - cc2.8xlarge - cg1.4xlarge ConstraintDescription: must be a valid EC2 instance type. KeyName: Description: Name of an EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' ConstraintDescription: must be the name of an existing EC2 KeyPair. SSHLocation: Description: ' The IP address range that can be used to access the web server using SSH.' Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
Para añadir mapeos

Las asignaciones son un conjunto de claves que se asocian a un conjunto de pares de nombre-valor. Son útiles para especificar valores basados en un valor de parámetro de entrada. En este tutorial, utilizaremos un mapeo para especificar un ID de AMI para una instancia de EC2 en función del tipo de instancia y la región en la que se crea la pila. Para obtener más información, consulte Mapeos.

  1. En el panel del editor integrado, elija la pestaña Mappings (Mapeos).

  2. Copie los siguientes mapeos de JSON y péguelos en editor integrado.

    { "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "HVM64" }, "t2.nano" : { "Arch" : "HVM64" }, "t2.micro" : { "Arch" : "HVM64" }, "t2.small" : { "Arch" : "HVM64" }, "t2.medium" : { "Arch" : "HVM64" }, "t2.large" : { "Arch" : "HVM64" }, "m1.small" : { "Arch" : "HVM64" }, "m1.medium" : { "Arch" : "HVM64" }, "m1.large" : { "Arch" : "HVM64" }, "m1.xlarge" : { "Arch" : "HVM64" }, "m2.xlarge" : { "Arch" : "HVM64" }, "m2.2xlarge" : { "Arch" : "HVM64" }, "m2.4xlarge" : { "Arch" : "HVM64" }, "m3.medium" : { "Arch" : "HVM64" }, "m3.large" : { "Arch" : "HVM64" }, "m3.xlarge" : { "Arch" : "HVM64" }, "m3.2xlarge" : { "Arch" : "HVM64" }, "m4.large" : { "Arch" : "HVM64" }, "m4.xlarge" : { "Arch" : "HVM64" }, "m4.2xlarge" : { "Arch" : "HVM64" }, "m4.4xlarge" : { "Arch" : "HVM64" }, "m4.10xlarge" : { "Arch" : "HVM64" }, "c1.medium" : { "Arch" : "HVM64" }, "c1.xlarge" : { "Arch" : "HVM64" }, "c3.large" : { "Arch" : "HVM64" }, "c3.xlarge" : { "Arch" : "HVM64" }, "c3.2xlarge" : { "Arch" : "HVM64" }, "c3.4xlarge" : { "Arch" : "HVM64" }, "c3.8xlarge" : { "Arch" : "HVM64" }, "c4.large" : { "Arch" : "HVM64" }, "c4.xlarge" : { "Arch" : "HVM64" }, "c4.2xlarge" : { "Arch" : "HVM64" }, "c4.4xlarge" : { "Arch" : "HVM64" }, "c4.8xlarge" : { "Arch" : "HVM64" }, "g2.2xlarge" : { "Arch" : "HVMG2" }, "g2.8xlarge" : { "Arch" : "HVMG2" }, "r3.large" : { "Arch" : "HVM64" }, "r3.xlarge" : { "Arch" : "HVM64" }, "r3.2xlarge" : { "Arch" : "HVM64" }, "r3.4xlarge" : { "Arch" : "HVM64" }, "r3.8xlarge" : { "Arch" : "HVM64" }, "i2.xlarge" : { "Arch" : "HVM64" }, "i2.2xlarge" : { "Arch" : "HVM64" }, "i2.4xlarge" : { "Arch" : "HVM64" }, "i2.8xlarge" : { "Arch" : "HVM64" }, "d2.xlarge" : { "Arch" : "HVM64" }, "d2.2xlarge" : { "Arch" : "HVM64" }, "d2.4xlarge" : { "Arch" : "HVM64" }, "d2.8xlarge" : { "Arch" : "HVM64" }, "hi1.4xlarge" : { "Arch" : "HVM64" }, "hs1.8xlarge" : { "Arch" : "HVM64" }, "cr1.8xlarge" : { "Arch" : "HVM64" }, "cc2.8xlarge" : { "Arch" : "HVM64" } }, "AWSRegionArch2AMI" : { "us-east-1" : {"HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c"}, "us-west-2" : {"HVM64" : "ami-a0cfeed8", "HVMG2" : "ami-0e09505bc235aa82d"}, "us-west-1" : {"HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1"}, "eu-west-1" : {"HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435"}, "eu-west-2" : {"HVM64" : "ami-f976839e", "HVMG2" : "NOT_SUPPORTED"}, "eu-west-3" : {"HVM64" : "ami-0ebc281c20e89ba4b", "HVMG2" : "NOT_SUPPORTED"}, "eu-central-1" : {"HVM64" : "ami-0233214e13e500f77", "HVMG2" : "ami-06223d46a6d0661c7"}, "ap-northeast-1" : {"HVM64" : "ami-06cd52961ce9f0d85", "HVMG2" : "ami-053cdd503598e4a9d"}, "ap-northeast-2" : {"HVM64" : "ami-0a10b2721688ce9d2", "HVMG2" : "NOT_SUPPORTED"}, "ap-northeast-3" : {"HVM64" : "ami-0d98120a9fb693f07", "HVMG2" : "NOT_SUPPORTED"}, "ap-southeast-1" : {"HVM64" : "ami-08569b978cc4dfa10", "HVMG2" : "ami-0be9df32ae9f92309"}, "ap-southeast-2" : {"HVM64" : "ami-09b42976632b27e9b", "HVMG2" : "ami-0a9ce9fecc3d1daf8"}, "ap-south-1" : {"HVM64" : "ami-0912f71e06545ad88", "HVMG2" : "ami-097b15e89dbdcfcf4"}, "us-east-2" : {"HVM64" : "ami-0b59bfac6be064b78", "HVMG2" : "NOT_SUPPORTED"}, "ca-central-1" : {"HVM64" : "ami-0b18956f", "HVMG2" : "NOT_SUPPORTED"}, "sa-east-1" : {"HVM64" : "ami-07b14488da8ea02a0", "HVMG2" : "NOT_SUPPORTED"}, "cn-north-1" : {"HVM64" : "ami-0a4eaf6c4454eda75", "HVMG2" : "NOT_SUPPORTED"}, "cn-northwest-1" : {"HVM64" : "ami-6b6a7d09", "HVMG2" : "NOT_SUPPORTED"} } } }

    A continuación, especificamos los mismos mapeos en YAML.

    Mappings: AWSInstanceType2Arch: t1.micro: Arch: HVM64 t2.nano: Arch: HVM64 t2.micro: Arch: HVM64 t2.small: Arch: HVM64 t2.medium: Arch: HVM64 t2.large: Arch: HVM64 m1.small: Arch: HVM64 m1.medium: Arch: HVM64 m1.large: Arch: HVM64 m1.xlarge: Arch: HVM64 m2.xlarge: Arch: HVM64 m2.2xlarge: Arch: HVM64 m2.4xlarge: Arch: HVM64 m3.medium: Arch: HVM64 m3.large: Arch: HVM64 m3.xlarge: Arch: HVM64 m3.2xlarge: Arch: HVM64 m4.large: Arch: HVM64 m4.xlarge: Arch: HVM64 m4.2xlarge: Arch: HVM64 m4.4xlarge: Arch: HVM64 m4.10xlarge: Arch: HVM64 c1.medium: Arch: HVM64 c1.xlarge: Arch: HVM64 c3.large: Arch: HVM64 c3.xlarge: Arch: HVM64 c3.2xlarge: Arch: HVM64 c3.4xlarge: Arch: HVM64 c3.8xlarge: Arch: HVM64 c4.large: Arch: HVM64 c4.xlarge: Arch: HVM64 c4.2xlarge: Arch: HVM64 c4.4xlarge: Arch: HVM64 c4.8xlarge: Arch: HVM64 g2.2xlarge: Arch: HVMG2 g2.8xlarge: Arch: HVMG2 r3.large: Arch: HVM64 r3.xlarge: Arch: HVM64 r3.2xlarge: Arch: HVM64 r3.4xlarge: Arch: HVM64 r3.8xlarge: Arch: HVM64 i2.xlarge: Arch: HVM64 i2.2xlarge: Arch: HVM64 i2.4xlarge: Arch: HVM64 i2.8xlarge: Arch: HVM64 d2.xlarge: Arch: HVM64 d2.2xlarge: Arch: HVM64 d2.4xlarge: Arch: HVM64 d2.8xlarge: Arch: HVM64 hi1.4xlarge: Arch: HVM64 hs1.8xlarge: Arch: HVM64 cr1.8xlarge: Arch: HVM64 cc2.8xlarge: Arch: HVM64 AWSRegionArch2AMI: us-east-1: HVM64: ami-0ff8a91507f77f867 HVMG2: ami-0a584ac55a7631c0c us-west-2: HVM64: ami-a0cfeed8 HVMG2: ami-0e09505bc235aa82d us-west-1: HVM64: ami-0bdb828fd58c52235 HVMG2: ami-066ee5fd4a9ef77f1 eu-west-1: HVM64: ami-047bb4163c506cd98 HVMG2: ami-0a7c483d527806435 eu-west-2: HVM64: ami-f976839e HVMG2: NOT_SUPPORTED eu-west-3: HVM64: ami-0ebc281c20e89ba4b HVMG2: NOT_SUPPORTED eu-central-1: HVM64: ami-0233214e13e500f77 HVMG2: ami-06223d46a6d0661c7 ap-northeast-1: HVM64: ami-06cd52961ce9f0d85 HVMG2: ami-053cdd503598e4a9d ap-northeast-2: HVM64: ami-0a10b2721688ce9d2 HVMG2: NOT_SUPPORTED ap-northeast-3: HVM64: ami-0d98120a9fb693f07 HVMG2: NOT_SUPPORTED ap-southeast-1: HVM64: ami-08569b978cc4dfa10 HVMG2: ami-0be9df32ae9f92309 ap-southeast-2: HVM64: ami-09b42976632b27e9b HVMG2: ami-0a9ce9fecc3d1daf8 ap-south-1: HVM64: ami-0912f71e06545ad88 HVMG2: ami-097b15e89dbdcfcf4 us-east-2: HVM64: ami-0b59bfac6be064b78 HVMG2: NOT_SUPPORTED ca-central-1: HVM64: ami-0b18956f HVMG2: NOT_SUPPORTED sa-east-1: HVM64: ami-07b14488da8ea02a0 HVMG2: NOT_SUPPORTED cn-north-1: HVM64: ami-0a4eaf6c4454eda75 HVMG2: NOT_SUPPORTED cn-northwest-1: HVM64: ami-6b6a7d09 HVMG2: NOT_SUPPORTED
Para añadir salidas

Las salidas declaran valores que desea que estén disponibles para una llamada a la API describe stacks o a través de la pestaña Outputs (Salidas) de la pila de la consola de CloudFormation. En este tutorial, mostraremos la URL del sitio web para que pueda ver fácilmente el sitio web una vez que lo hayamos creado. Para obtener más información, consulte Salidas.

  1. En el panel del editor integrado, seleccione la pestaña Outputs (Salidas).

  2. Copie la siguiente salida JSON y péguela en editor integrado.

    La salida utiliza una función intrínseca Fn::GetAtt para obtener la IP pública de la instancia del servidor web.

    { "Outputs": { "URL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "WebServerInstance", "PublicIp" ] } ] ] }, "Description": "Newly created application URL" } } }

    Aquí podemos ver la misma salida con el formato YAML.

    Outputs: URL: Value: !Join - '' - - 'http://' - !GetAtt - WebServerInstance - PublicIp Description: Newly created application URL
  3. Guarde la plantilla de nuevo para no perder los cambios. Puede guardar los cambios de forma segura en el mismo archivo que creó en la sección anterior.

Ahora que se han asignado los parámetros, mapeos y salidas de la plantilla, podemos especificar las propiedades de los recursos.

Paso 3: Especificar las propiedades de los recursos

Muchos recursos han necesitado propiedades que definen sus configuraciones o ajustes, como, por ejemplo, el tipo de instancia que se debe utilizar para el servidor web. De forma similar a lo que hicimos en el paso anterior, vamos a utilizar el editor integrado de AWS CloudFormation Designer para especificar propiedades de los recursos. Proporcionamos YAML y JSON de ejemplo que puede copiar y pegar en editor integrado.

Para especificar las propiedades de los recursos
  1. En el lienzo de AWS CloudFormation Designer, elija el recurso de la VPC.

    editor integrado muestra los componentes de nivel de recurso que puede editar, como, por ejemplo, las propiedades de recursos y atributos.

  2. En el panel del editor integrado, elija la pestaña Properties (Propiedades).

  3. Copie el siguiente fragmento de código JSON y péguelo en el editor integrado, entre las llaves de Properties (Propiedades) ({}).

    Este fragmento de código especifica los ajustes de DNS y el bloque de CIDR de la VPC.

    "EnableDnsSupport": "true", "EnableDnsHostnames": "true", "CidrBlock": "10.0.0.0/16"

    Para YAML, escriba una línea nueva después de Properties: y pegue el siguiente fragmento de código.

    EnableDnsSupport: 'true' EnableDnsHostnames: 'true' CidrBlock: 10.0.0.0/16
    nota

    Para una mayor eficacia, proporcionamos fragmentos de código YAML y JSON que puede copiar y pegar. Tenga en cuenta, no obstante, que el editor tiene una característica autocompletar que puede utilizar para especificar manualmente cada propiedad. Para obtener más información, consulte Editor de JSON y YAML integrado.

  4. Repita este proceso para los siguientes recursos:

    PublicSubnet

    Agregue la siguiente propiedad del bloque de CIDR después de la propiedad del ID de la VPC. AWS CloudFormation Designer agregó automáticamente la propiedad del ID de la VPC al arrastrar la subred dentro de la VPC.

    nota

    Verá algunas asociaciones más que AWS CloudFormation Designer creó automáticamente. Añada tan solo las nuevas propiedades, que están en negrita.

    JSON

    "VpcId": { "Ref": "VPC" }, "CidrBlock": "10.0.0.0/24"

    YAML

    VpcId: !Ref VPC CidrBlock: 10.0.0.0/24
    PublicRoute

    Agregue la siguiente propiedad de bloque de CIDR de destino, que dirige todo el tráfico a gateway de Internet:

    JSON

    "DestinationCidrBlock": "0.0.0.0/0", "RouteTableId": { "Ref": "PublicRouteTable" }, "GatewayId": { "Ref": "InternetGateway" }

    YAML

    DestinationCidrBlock: 0.0.0.0/0 RouteTableId: !Ref PublicRouteTable GatewayId: !Ref InternetGateway
    WebServerSecurityGroup

    Añada las siguientes reglas entrantes que determinan el tráfico que puede llegar a la instancia del servidor web. Las reglas permiten todo el tráfico HTTP y determinado tráfico SSH, que usted especifique como valor de parámetro al crear una pila.

    JSON

    "VpcId": { "Ref": "VPC" }, "GroupDescription" : "Allow access from HTTP and SSH traffic", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIp": "0.0.0.0/0" }, { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": { "Ref": "SSHLocation" } } ]

    YAML

    VpcId: !Ref VPC GroupDescription: Allow access from HTTP and SSH traffic SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: !Ref SSHLocation
    WebServerInstance

    Debe especificar un número de propiedades para la instancia del servidor web, por lo que vamos a resaltar tan solo algunas para realizar una demostración. Las propiedades InstanceType e ImageId utilizan los valores de los parámetros y mapeos que especificamos en la sección anterior. Al crear una pila, especifica el tipo de instancia como valor de parámetro. El valor ImageId es un mapeo que se basa en la región de su pila y el tipo de instancia que especificó.

    La propiedad NetworkInterfaces especifica los ajustes de red para la instancia del servidor web. Esta propiedad nos permite asociar el grupo de seguridad y la subred a la instancia. Aunque AWS CloudFormation Designer utilizó la propiedad SubnetId para asociar la instancia a la subred, tenemos que utilizar la propiedad NetworkInterfaces porque es la única forma de dar al servidor web una dirección IP pública. Cuando especifica la propiedad NetworkInterfaces, debe especificar la subred y el grupo de seguridad dentro de dicha propiedad.

    En la propiedad UserData, especifique los scripts de configuración que se ejecutan una vez que la instancia está operativa. Toda la información de configuración se define en los metadatos de la instancia, que añadiremos en el siguiente paso.

    Sustituya todas las propiedades por el siguiente fragmento de código:

    importante

    No añada este fragmento de código a las propiedades existentes.

    JSON

    "InstanceType": { "Ref": "InstanceType" }, "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ] } ] }, "KeyName": { "Ref": "KeyName" }, "NetworkInterfaces": [ { "GroupSet": [ { "Ref": "WebServerSecurityGroup" } ], "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "DeleteOnTermination": "true", "SubnetId": { "Ref": "PublicSubnet" } } ], "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "# Install the files and packages from the metadata\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --configsets All ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } }

    YAML

    InstanceType: !Ref InstanceType ImageId: !FindInMap - AWSRegionArch2AMI - !Ref 'AWS::Region' - !FindInMap - AWSInstanceType2Arch - !Ref InstanceType - Arch KeyName: !Ref KeyName NetworkInterfaces: - GroupSet: - !Ref WebServerSecurityGroup AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: !Ref PublicSubnet UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -xe - | yum install -y aws-cfn-bootstrap - | # Install the files and packages from the metadata - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --configsets All ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --region ' - !Ref 'AWS::Region' - |+
  5. Añada los metadatos de la configuración del servidor web al recurso WebServerInstance.

    1. Elija el recurso WebServerInstance y, a continuación, elija la pestaña Metadata (Metadatos) en el panel del editor integrado.

    2. Si está creando la plantilla en JSON: dentro de las llaves de Metadata ({}) y después de la llave de cierre AWS::CloudFormation::Designer, añada una coma (,).

    3. Después de la propiedad AWS::CloudFormation::Designer, agregue el siguiente fragmento de código, que indica al script auxiliar cfn-init que active el servidor web y cree una página web básica.

      JSON

      "AWS::CloudFormation::Init" : { "configSets" : { "All" : [ "ConfigureSampleApp" ] }, "ConfigureSampleApp" : { "packages" : { "yum" : { "httpd" : [] } }, "files" : { "/var/www/html/index.html" : { "content" : { "Fn::Join" : ["\n", [ "<h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1>" ]]}, "mode" : "000644", "owner" : "root", "group" : "root" } }, "services" : { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } } }

      YAML

      'AWS::CloudFormation::Init': configSets: All: - ConfigureSampleApp ConfigureSampleApp: packages: yum: httpd: [] files: /var/www/html/index.html: content: !Join - |+ - - >- <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> mode: '000644' owner: root group: root services: sysvinit: httpd: enabled: 'true' ensureRunning: 'true'
  6. En la barra de herramientas de AWS CloudFormation Designer elija Validate template (Validar plantilla) ( ) para verificar errores de sintaxis en su plantilla.

    Vea y arregle errores en el panel Messages (Mensajes) y, a continuación, valide de nuevo la plantilla. Si no ve errores, su plantilla es válida desde el punto de vista sintáctico.

  7. Guarde la plantilla rellenada para conservar todos los cambios que ha realizado.

Ahora tiene una plantilla de CloudFormation completa que puede utilizar para crear un servidor web básico en una VPC. Para crear la plantilla, en primer lugar, agregamos y conectamos recursos de la plantilla mediante el panel del lienzo de AWS CloudFormation Designer. A continuación, utilizamos editor integrado para añadir otros componentes a la plantilla y para especificar las propiedades de los recursos. En el siguiente paso, utilizaremos esta plantilla para crear una pila.

Paso 4: Aprovisionar recursos

Para crear una pila, puede lanzar el asistente de creación de pilas de CloudFormation desde AWS CloudFormation Designer. Utilizaremos la plantilla que hemos creado en los pasos anteriores para crear una pila de CloudFormation. Después de que CloudFormation aprovisiona todos los recursos tendrá una página web básica operativa.

Para crear la pila
  1. En la barra de herramientas de AWS CloudFormation Designer elija Create Stack (Crear pila) (el icono de la nube).

    AWS CloudFormation Designer guarda la plantilla abierta en un bucket de S3 y, a continuación, lanza el asistente de creación de pilas de CloudFormation. CloudFormation utiliza el mismo bucket de S3 que crea siempre que carga plantillas.

  2. CloudFormation rellena automáticamente la URL de la plantilla; elija Next (Siguiente).

  3. En la sección Specify Details (Especificar detalles), introduzca un nombre de pila en el campo Stack name (Nombre de pila). Para este ejemplo, use BasicWebServerStack.

  4. En la sección Parameters (Parámetros), para el campo KeyName, escriba el nombre de un par de claves de Amazon EC2 en la misma región en la que está creando la pila.

  5. Mantenga el resto de valores de parámetros predeterminados y elija Next (Siguiente).

  6. Para este tutorial, no tiene que añadir etiquetas ni especificar una configuración avanzada, así que elija Next (Siguiente).

  7. Asegúrese de que el nombre de la pila y el nombre del par de claves de Amazon EC2 son correctos y, a continuación, elija Create (Crear).

AWS CloudFormation puede tardar varios minutos en crear su plantilla. Para monitorizar el progreso, vea los eventos de la pila. Para obtener más información acerca de la visualización de eventos de pila, consulte Visualización de recursos y datos de la pila de AWS CloudFormation en la AWS Management Console. Una vez que se ha creado la pila, vea las salidas de la pila y visite la URL del sitio web de ejemplo para comprobar que el sitio web está operativo. Para obtener más información, consulte Visualización de recursos y datos de la pila de AWS CloudFormation en la AWS Management Console.

Ahora que ha creado correctamente una plantilla y ha lanzado una pila con AWS CloudFormation Designer, puede utilizar la pila en el siguiente tutorial: Tutorial: Utilice AWS CloudFormation Designer para modificar una plantilla de la pila, que modifica la plantilla para crear un servidor web escalable.