Tutorial de AWS CLI: cómo instalar, configurar y usar AWS CLI para comprender su entorno de recursos

Cómo obtener exactamente la información de la cuenta y el entorno que necesita para administrar su cuenta de AWS utilizando solo la AWS CLI

La instalación de la AWS CLI es bastante sencilla. La mejor manera de hacerlo es dirigirse a la guía de instalación de AWS y seguir las instrucciones para su sistema operativo.

En este momento nos están empujando hacia la versión 2 de la CLI y no he visto ninguna razón para no seguir adelante. Estoy trabajando con Linux, así que ahí es donde me dirijo ahora.

Para hacerlo, pegaré el comando curl de la página de Amazon en mi shell de Linux que descargará el paquete y lo escribiré en un archivo zip local, que luego descomprimiré. Eso creará un nuevo directorio llamado aws que contendrá un script de instalación, que puedo ejecutar usando sudo para obtener privilegios de administrador. Ejecutaré aws --version para confirmar que todo funcionó como se suponía.

curl "//awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip ls aws sudo ./aws/install aws --version 

El siguiente paso requerirá un viaje rápido a la consola de administración. Verá, para autenticar la CLI en su cuenta, necesitará una clave de acceso válida. Ahora, la CLI tiene un comando "create-access-key" que generará una nueva clave, pero eso solo es posible una vez que me haya autenticado. Estoy seguro de que comprende el problema con eso.

Puede acceder a la página de credenciales de seguridad desde el menú desplegable de la cuenta en la parte superior de cualquier página de la consola. Con sus credenciales en la mano, puede ejecutar "aws configure". Se le pedirá que ingrese su ID de clave de acceso y la clave secreta. Si lo desea, puede elegir una región de AWS y un formato de salida predeterminados. El formato no será un problema, así que lo dejaré como predeterminado.

aws configure 

Eso es. Solo para confirmar que todo funcionó, enumeraré todos los depósitos de S3 en mi cuenta. Con eso, todos nos pondremos manos a la obra en el siguiente clip.

aws s3 ls 

Es posible que ya sepa que el servicio CloudFormation de Amazon existe para permitirle administrar la infraestructura de su aplicación organizándola en pilas de recursos de su cuenta de AWS.

Las plantillas de CloudFormation que definen esas pilas se pueden compartir, editar y lanzar en cualquier lugar, lo que le brinda entornos de aplicaciones en la nube predecibles y confiables donde y cuando los necesite.

También puede saber que puede administrar sus pilas de CloudFormation a través de la Consola de administración de AWS y, como explico en mi nuevo curso de Pluralsight, crear y administrar pilas con AWS CloudFormation mediante la interfaz de línea de comandos, utilizando la AWS CLI.

Si opta por la AWS CLI, algo que recomiendo encarecidamente, necesitará una forma de recopilar información clave sobre otros recursos de la cuenta. Pero la forma en que se espera que obtenga esa información a través de la CLI puede, al principio, no parecer tan obvia.

Para mostrarle lo que quiero decir, experimentemos con una pila más compleja utilizando una plantilla que proviene de las muestras de documentación de AWS.

El conjunto de plantillas de Application Frameworks incluye una plantilla para servidores Linux autoescalados que vendrán preprovisionados con el servidor web Apache y el lenguaje de scripting PHP, y una conexión a una instancia de base de datos Multi-AZ RDS que ejecuta el motor de base de datos MySQL.

Puede hacer clic en Ver en esa página de documentación de AWS y echar un vistazo a la plantilla. Allí verá las secciones de Parámetros que definen la VPC y las subredes en las que se lanzará su instancia y el nombre, el usuario y la contraseña de la base de datos MySQL.

Es fundamental que todos los servicios adecuados conozcan esos detalles porque, de lo contrario, no podrán comunicarse entre sí. Tendremos que encontrar una forma de agregar esos valores. Para que todo funcione, simplemente puede hacer clic para ver la plantilla (que puede ver aquí) y copiar el contenido y pegarlo en un nuevo archivo JSON en su máquina local.

Utiliza la CLI para iniciar una pila de Cloudformation utilizando el comando create-stack. El comando, sin embargo, necesita algunos argumentos para transmitir información importante. Este ejemplo mínimo le muestra cómo apuntar CloudFormation a su archivo de plantilla JSON, un nombre para asignar a su pila y una clave SSH válida para que pueda iniciar sesión en la instancia que crea.

aws cloudformation create-stack \ --template-body file://lamp-as.json \ --stack-name lamp \ --parameters \ ParameterKey=KeyName,ParameterValue=mykey 

El problema es que, si ejecutara ese comando en la plantilla en su documento JSON, fallaría. Esto se debe a que, como sin duda recordará al mirar la plantilla, hay algunos parámetros adicionales que deben satisfacerse. Específicamente, necesitaremos referencias a una VPC y a dos subredes, y debido a que se trata de una implementación de zonas de disponibilidad múltiple, deberán estar en zonas diferentes.

¿Cómo funcionará eso? Es la AWS CLI al rescate. ¿Necesita un ID de VPC? Teniendo en cuenta que las VPC son objetos EC2, puede ejecutar aws ec2 describe-vpcs y todos los datos que necesitará, incluido el ID de VPC, aparecerán mágicamente. ¿Y subredes? Bueno, más de lo mismo, obviamente. Simplemente copie los ID de subred para dos de las subredes que aparecerán y estará en el negocio.

aws ec2 describe-vpcs aws ec2 describe-subnets 

Ahora juntemos toda esa información en nuestra nueva versión del comando create-stack. Deberá tener cuidado con esto ya que hay algunas trampas desagradables en la sintaxis.

aws cloudformation create-stack \ --template-body file://lamp-as.json \ --stack-name lamp-as \ --parameters \ ParameterKey=KeyName,ParameterValue=mykey \ ParameterKey=VpcId,ParameterValue=vpc-1ffbc964 \ ParameterKey=Subnets,ParameterValue=\'subnet-0e170b31,subnet-52d6117c\' \ ParameterKey=DBUser,ParameterValue=myadmin \ ParameterKey=DBPassword,ParameterValue=mypass23 

El primer parámetro nuevo es VPC-ID. Pero asegúrese de obtener el caso correcto: usar una D mayúscula en Id hará que todo falle. No sé por qué hacen que las cosas sean tan difíciles de vivir, pero eso es lo que tenemos.

El siguiente es aún más delicado. Como necesitamos dos subredes, tendremos que ingresarlas en una sola línea separada por una coma, pero sin espacios. Sin embargo, también necesitaremos encerrar la cadena entre apóstrofos simples. Pero la CLI no puede leer apóstrofos así, así que tendremos que escapar de ellos usando barras diagonales inversas. ¿Lo tengo?

También agregaré esos dos parámetros de la base de datos: DBUser y mi DBPassword ultra secreta y súper críptica. ¿Funcionará? Puedes apostar. Pero no le digas a nadie cuántas veces tuve que probar esto sin que me vieras antes de hacerlo bien. Recuerda: el fracaso es tu amigo.

Cuando nuestra pila es buena y se lanza (lo que puede tardar hasta media hora), ejecutar describe-stacks nos dará la URL de nuestro sitio web.

aws cloudformation describe-stacks 

Pero esa no es toda la historia. Voy a usar otro comando aws ec2, describe-instances esta vez, para obtener información sobre las instancias EC2 que se lanzaron como parte de esta pila. Este filtrará los resultados, restringiendo la salida solo a aquellas instancias que se están ejecutando actualmente.

aws ec2 describe-instances \ --filters Name=instance-state-name,Values=running \ --query 'Reservations[*].Instances[*].{Instance:InstanceId,PublicIPAddress:PublicIpAddress}' 

No tengo otras instancias ejecutándose en esta región, por lo que solo aparecerán las instancias de CloudFormation. Ahora uso --query para filtrar aún más la salida y darme solo los ID de instancia y las direcciones IP públicas de esas instancias. Como era de esperar, hay exactamente dos en ejecución.

Solo una muestra, y la mayor parte relacionada específicamente con CloudFormation, pero creo que se hace una idea de cómo funciona la recopilación de información mediante la AWS CLI.

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