AWS CloudFormation: dónde encontrar ayuda cuando la necesite

Mirar fijamente una línea de comandos simple y tonta sin saber qué hacer con la AWS CLI a continuación puede ser una experiencia humillante. Y, al menos en mi experiencia, mirar la Consola de administración para AWS CloudFormation puede ser peor.

Permítanme ofrecerles una ayuda rápida para "comenzar" basada en parte del contenido de mi último curso de Pluralsight.

En primer lugar, si planea administrar sus pilas de CloudFormation a través de la AWS CLI en lugar de la Consola de administración, analizo los conceptos básicos en este artículo. Una vez que todo esté resuelto, estará listo para cualquier cosa.

Empiece simple:

$ aws s3 ls 2019-11-03 13:16:59 athena5905 2019-02-03 18:01:42 book-3939 2014-07-01 18:52:32 elasticbeanstalk-ap-northeast-1-426397493112 2014-08-28 16:57:49 elasticbeanstalk-us-east-1-426497493912 2019-05-04 22:17:50 ltest236 2018-07-15 15:52:30 mybucket99688223 2017-07-25 17:06:43 nextcloud3239027

"aws" en ese ejemplo le dice a su shell que desea que lo siguiente sea manejado por la AWS CLI. El "s3" que escribo a continuación le dice a la CLI que usaré el servicio S3, que es el servicio de almacenamiento simple de Amazon. Finalmente, "ls" o "list" es el comando que me gustaría ejecutar en ese servicio.

La CLI, usando las variables de autenticación de cuenta que la herramienta de configuración agregó a mi entorno, ahora se apresurará y accederá a mi cuenta, en este caso recuperando los nombres de todos mis depósitos.

Como era de esperar, le dice a AWS que está buscando trabajar con CloudFormation utilizando "cloudformation". Si simplemente ejecuto eso sin especificar un comando, obtendré un mensaje de error:

aws cloudformation usage: aws [options]   [ ...] [parameters] To see help text, you can run: aws help aws  help aws   help aws: error: the following arguments are required: operation 

Pero es un mensaje importante, ya que nos dice cómo acceder a la documentación en línea. La ayuda sensible al contexto está disponible en cada capa.

Vea lo que sucede si agrega "ayuda" después de "formación en la nube". Obtendrá una breve descripción y luego una lista de todos los subcomandos disponibles.

$ aws cloudformation help CLOUDFORMATION() CLOUDFORMATION() NAME cloudformation - DESCRIPTION AWS CloudFormation allows you to create and manage AWS infrastructure deployments predictably and repeatedly. You can use AWS CloudFormation to leverage AWS products, such as Amazon Elastic Compute Cloud, Amazon Elastic Block Store, Amazon Simple Notification Service, Elastic Load Balancing, and Auto Scaling to build highly-reliable, highly scalable, cost-effective applications without creating or configuring the underlying AWS infrastructure. With AWS CloudFormation, you declare all of your resources and dependencies in a template file. The template defines a collection of resources as a single unit called a stack. AWS CloudFormation creates and deletes all member resources of the stack together and manages all dependencies between the resources for you. For more information about AWS CloudFormation, see the AWS CloudFormation Product Page. Amazon CloudFormation makes use of other AWS products. If you need additional technical information about a specific AWS product, you can find the product's technical documentation at docs.aws.amazon.com. AVAILABLE COMMANDS o cancel-update-stack o continue-update-rollback o create-change-set o create-stack o create-stack-set o delete-change-set o delete-stack o delete-stack-instances o delete-stack-set o deploy o describe-account-limits o describe-change-set o describe-stack-events o describe-stack-instance o describe-stack-resource o describe-stack-resources o describe-stack-set o describe-stack-set-operation o describe-stacks o estimate-template-cost o execute-change-set o get-stack-policy [...]

Ahora ejecute el comando "describe-stacks". Probablemente no haya pilas en vivo en su cuenta en este momento, por lo que no verá ningún resultado.

Pero haz eso de nuevo, esta vez agregando "ayuda". Este le mostrará algunas opciones que le permitirán filtrar o manipular los datos que obtenga. Por ejemplo, podría apuntar la CLI a una pila específica usando "--stack-name" seguido del nombre de una pila existente.

$ aws cloudformation describe-stacks $ aws cloudformation describe-stacks help NAME describe-stacks - DESCRIPTION Returns the description for the specified stack; if no stack name was specified, then it returns the description for all the stacks created. NOTE: If the stack does not exist, an AmazonCloudFormationException is returned. See also: AWS API Documentation See 'aws help' for descriptions of global parameters. describe-stacks is a paginated operation. Multiple API calls may be issued in order to retrieve the entire data set of results. You can disable pagination by providing the --no-paginate argument. When using --output text and the --query argument on a paginated response, the --query argument must extract data from the results of the following query expressions: Stacks SYNOPSIS describe-stacks [--stack-name ] [--cli-input-json ] [--starting-token ] [--max-items ] [--generate-cli-skeleton ] OPTIONS --stack-name (string) The name or the unique stack ID that is associated with the stack, which are not always interchangeable: [...] $ aws cloudformation describe-stacks --stack-name myname 

Esas son herramientas que lo ayudarán sin importar qué servicio de AWS esté utilizando. Pero mirando específicamente a CloudFormation, hay algunas colecciones oficiales valiosas de plantillas de muestra que debe conocer. Siendo la sintaxis JSON o YAML lo que es, probablemente no querrá comenzar desde un documento vacío.

La propia Amazon ha hecho un gran trabajo creando plantillas con las que trabajar. Su primera parada debería ser la página de plantillas de AWS CloudFormation. Aquí encontrará enlaces a fragmentos y marcos de aplicación específicos y más contenido de vanguardia.

Pero ahora mismo me gustaría llamar su atención sobre una de las "plantillas de muestra" organizadas por el servicio AWS (este código proviene de uno de los ejemplos de Amazon EC2).

La plantilla comienza con una descripción de forma libre que nos dice de manera útil qué tipo de pila generará. También se nos dice que podemos personalizar la plantilla utilizando una dirección IP elástica existente en lugar de una que se genera automáticamente.

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample: Create an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based on the region in which the stack is run. This example creates an EC2 security group for the instance to give you SSH access. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resources used if you create a stack from this template.", 

Deberá pasar el nombre de un KeyPair existente de la región actual en su cuenta de AWS para poder abrir SSH remoto en la instancia de Linux que se lanzará. Alternativamente, puede pasar ese valor desde la línea de comando.

La sección Parámetros también es donde se define el tipo de instancia EC2. El valor predeterminado es t2.small, pero podríamos intercambiar ese valor por cualquiera de los otros valores permitidos en este documento o anularlo desde la línea de comandos.

 "Parameters" : { "KeyName": { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription" : "must be the name of an existing EC2 KeyPair." }, "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", 

Si se desplaza hacia abajo por la sección Mapeos, podemos ver largas listas de arquitecturas de hardware disponibles e identificadores de imágenes de máquinas de Amazon para cada región.

Esta es una sección opcional donde puede insertar sus propios valores no estándar, por ejemplo, se lanzaría un tipo de imagen en función de un conjunto particular de parámetros, tal vez incluso una imagen AMI privada. Estos datos se organizan en pares clave / valor.

 "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "HVM64" }, "t2.nano" : { "Arch" : "HVM64" }, "t2.micro" : { "Arch" : "HVM64" }, 

En este caso, la sección Recursos define el entorno de su instancia. El SecurityGroup, por ejemplo, está configurado para abrir el puerto SSH 22 pero nada más. La dirección IP pública de la instancia también está asociada con la nueva dirección IP elástica que se asignará.

 "InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access via port 22", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : { "Ref" : "SSHLocation"} } ] } } }, 

Otro recurso importante de Amazon: Quick Starts. Estrictamente hablando, las pilas de infraestructura prediseñadas que se proporcionan aquí para ayudarlo a crear implementaciones en la nube más complejas no están directamente relacionadas con CloudFormation. Fueron proporcionados por empresas de terceros para simplificar el proceso de construcción de su infraestructura dentro de la plataforma AWS.

Pero el hecho es que cada uno comienza con su propia plantilla única de CloudFormation. Hacer clic para ver ejemplos reales a menudo lo llevará a las plantillas de código fuente de la pila dentro de un repositorio de GitHub. Este ejemplo nos muestra las herramientas que necesitaría para iniciar una consola HashiCorp:

De cualquier manera, siéntase libre de usar estas plantillas como herramientas de aprendizaje, o explore la selección para ver si hay una pila que se ajuste a sus necesidades.

Hay mucha más bondad de administración en forma de libros, cursos y artículos disponibles en mi bootstrap-it.com.