Añado apuntes de comandos del curso de Apasoft

This commit is contained in:
Manuel Vergara 2022-09-30 11:44:49 +02:00
parent d02b29de72
commit dbf7152ca6

364
README.md
View File

@ -1,6 +1,49 @@
Cheatsheet AWS CLI Cheatsheet AWS CLI
================== ==================
Este documento ha sido producto de un curso de Sergio de [Apasoft](https://github.com/ApasoftTraining) junto con un estudio de la documentación de AWS CLI.
- [Apuntes del curso](https://vergaracarmona.es/wp-content/uploads/2022/09/Apuntes_AWS.pdf)
- [Artículo "Apuntes AWS y resumen de sus servicios"](https://vergaracarmona.es/apuntes-aws-y-resumen-de-sus-servicios)
El curso puede ser base preparatorio para 3 [certificaciones oficiales](https://aws.amazon.com/es/certification/) de AWS:
- Cloud Practitioner (6 meses)
- Solutions Architect (1 año)
- SysOps Administrator (1 año)
# Índice 📎
- [Cheatsheet AWS CLI](#cheatsheet-aws-cli)
- [Índice 📎](#índice-)
- [¿Qué es la CLI de AWS?](#qué-es-la-cli-de-aws)
- [Configurar](#configurar)
- [API Gateway](#api-gateway)
- [Amplify](#amplify)
- [CloudFront](#cloudfront)
- [CloudWatch](#cloudwatch)
- [CloudTrail](#cloudtrail)
- [Cognito](#cognito)
- [DynamoDB](#dynamodb)
- [EBS](#ebs)
- [EC2](#ec2)
- [FSC](#fsc)
- [ECR](#ecr)
- [ECS](#ecs)
- [EKS](#eks)
- [ElastiCache](#elasticache)
- [ELB](#elb)
- [Grupo IAM](#grupo-iam)
- [Usuario IAM](#usuario-iam)
- [Lambda](#lambda)
- [RDS](#rds)
- [Route53](#route53)
- [S3](#s3)
- [SNS](#sns)
- [SQS](#sqs)
- [Filtros de las filas](#filtros-de-las-filas)
- [Filtros de columnas. Opción Query](#filtros-de-columnas-opción-query)
¿Qué es la CLI de AWS? ¿Qué es la CLI de AWS?
---------------------- ----------------------
@ -8,13 +51,24 @@ AWS CLI significa Amazon Web Services Command Line Interface. A la hora de gesti
Si aún no has instalado AWS CLI, comienza en la [Guía de instalación de AWS CLI de Amazon](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html). Si aún no has instalado AWS CLI, comienza en la [Guía de instalación de AWS CLI de Amazon](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html).
**Instalación en Linux**
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Para ver la versión:
aws version
**Consejo 1 - usa la función de completar comandos.** **Consejo 1 - usa la función de completar comandos.**
Creemos que la mejor hoja de trucos que puedes tener para AWS CLI es la función de completar comandos. Le permite utilizar la tecla Tab para completar un comando parcialmente introducido. Completará tu comando o mostrará una lista de comandos sugeridos. No siempre se instala automáticamente, por lo que tendrás que configurarlo manualmente. Aquí está la [guía de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-completion.html) para ponerlo en marcha. Creemos que la mejor hoja de trucos que puedes tener para AWS CLI es la función de completar comandos. Le permite utilizar la tecla Tab para completar un comando parcialmente introducido. Completará tu comando o mostrará una lista de comandos sugeridos. No siempre se instala automáticamente, por lo que tendrás que configurarlo manualmente. Aquí está la [guía de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-completion.html) para ponerlo en marcha.
**Consejo 2 - usa el comando help.** **Consejo 2 - usa el comando help.**
Cuando necesites un poco de ayuda extra sólo tienes que apoyarte en el comando de ayuda de la CLI de AWS para obtener documentación detallada sobre lo que está disponible. Para utilizar este comando sólo tienes que añadir help al final del nombre del comando. Por ejemplo, si haces 'aws help', te mostrará las opciones generales de la CLI de AWS y una lista de todos los servicios. Si necesitas ver todos los comandos disponibles para AWS EC2 específicamente, escribirías 'aws ec2 help'. Se convertirá en una gran ayuda para que te conviertas en un profesional de la CLI de AWS. Cuando necesites un poco de ayuda extra sólo tienes que apoyarte en el comando de ayuda de la CLI de AWS para obtener documentación detallada sobre lo que está disponible. Para utilizar este comando sólo tienes que añadir help al final del nombre del comando. Por ejemplo, si haces 'aws help', te mostrará las opciones generales de la CLI de AWS y una lista de todos los servicios. Si necesitas ver todos los comandos disponibles para AWS EC2 específicamente, escribirías `aws ec2 help`. Se convertirá en una gran ayuda para que te conviertas en un profesional de la CLI de AWS.
**Consejo 3 - utilizar jq.** **Consejo 3 - utilizar jq.**
@ -27,7 +81,7 @@ Create profiles
aws configure --profile profilename aws configure --profile profilename
Format de salida Formato de salida
aws configure output format {json, yaml, yaml-stream, text, table} aws configure output format {json, yaml, yaml-stream, text, table}
@ -35,6 +89,16 @@ Especificar Region AWS
aws configure region (region-name) aws configure region (region-name)
Si queremos hacerlo todo a la vez
aws configure
Pedirá 4 datos: El ID de la clave, la clave, la region por defecto y el formato de salido por defecto (Por defecto es text.)
Mostrar el usuario conectado
aws sts get-caller-identity
API Gateway API Gateway
----------- -----------
@ -87,6 +151,26 @@ Eliminar una o varias alarmas (puede eliminar hasta 100 a la vez)
aws cloudwatch delete-alarms --alarm-names (alarmnames) aws cloudwatch delete-alarms --alarm-names (alarmnames)
CloudTrail
----------
Listar la trails
aws cloudtrail list-trails
Mostrar propiedades
aws cloudtrails describe-trails trail-name-list nombre nombre-bucket
Crear un trail en un bucket existente. Por defecto, guarda los datos de administración.
aws cloudtrail create-trail --name Nombre-Trail s3-bucket-name nombre-bucket
Eliminar un trail
aws cloudtrail delete-trail --name nombre-del-trail
Cognito Cognito
------- -------
@ -157,19 +241,84 @@ Lista de instancias con dirección IP pública y nombre
aws ec2 describe-instances --query 'Reservas[*].Instances[?not_null(PublicIpAddress)]' | jq -r '.[][]|.PublicIpAddress+" "+(.Tags[]|select(.Key=="Name").Value)' aws ec2 describe-instances --query 'Reservas[*].Instances[?not_null(PublicIpAddress)]' | jq -r '.[][]|.PublicIpAddress+" "+(.Tags[]|select(.Key=="Name").Value)'
Crear una instancia - se necesita la ID de un AMI. Luego se debe indicar el tipo de instancia, la Key Pair y el grupo de seguridad. Además indicamos cuantas instancias queremos. Ejemplo:
aws ec2 run-instances --image-id ami-02d0b1ffa5f16402d --instance-type t3.micro --key-name ServidorPruebasAWS2 --security-groups ServidoresWEB --count 1ç
Stop instancia
aws ec2 stop-instances --instance-ids i-00a3750814c5340e9
Start instancia
aws ec2 start-instances --instance-ids i-00a3750814c5340e9
Terminar instancia
aws ec2 terminate-instances --instance-ids i-00a3750814c5340e9
Mostrar AMIs
aws ec2 describe-images --owner self
La opción `--owner self` se debe poner para que tan solo salga las AMIs propias y no todas a las que se tiene acceso, que son todas las públicas. Ejemplo con una query compleja
aws ec2 describe-images --owner self --query 'Images[].[{"ID imagen":ImageId},{"Nombre":Name},{"ID SnapShot":BlockDeviceMappings[].Ebs.SnapshotId}]'
Crear una AMI desde una instancia que este corriendo - Primero hay que examinar la ID de la instancia de la que se quiere crear el AMI.
aws ec2 describe-instances
Se podrá filtrar con --query o --filter para localizar la instancia concreta. Luego hacemos el comando:
aws ec2 create-image --instance-id i-0e060585afc6bcab9 --name AMIpersonalizadaConWeb
Para comprobar si es correcto con query
aws ec2 describe-images --owner self --query "Images[].[Name,ImageId,BlockDeviceMappings[].Ebs.SnapshotId,State]"
Mostrar volumenes
aws ec2 describe-volumes
Para ver solo los ids de los volumenes
aws ec2 describe-volumes --query 'Volumes[].VolumeId'
Para ver a donde están asociadas
aws ec2 describe-volumes --query 'Volumes[].[{"Id del Volumen":VolumeId},{"ID instancia asociada":Attachments[].InstanceId}]'
Crear volumen
aws ec2 create-volume --availability-zone eu-west-3b --size 5 --volume-type gp2
Adjuntar volumen a una instancia
aws ec2 attach-volume --device /dev/sdf --instance-id i-0e060585afc6bcab9 --volume-id vol-0c956f9595c594bb9
Para desmontar un volumen
aws ec2 detach-volume --volume-id vol-0c956f9595c594bb9
Borrar un volumen
aws ec2 delete-volume --volume-id vol-0c956f9595c594bb9
Lista de VPCs y bloque de IPs CIDR Lista de VPCs y bloque de IPs CIDR
aws ec2 describe-vpcs | jq -r '.Vpcs[]|.VpcId+" "+(.Tags[]|select(.Key=="Name").Value)+" "+.CidrBlock' aws ec2 describe-vpcs | jq -r '.Vpcs[]|.VpcId+" "+(.Tags[]|select(.Key=="Name").Value)+" "+.CidrBlock'
Lista de subredes para una VPC Lista de subredes para una VPC
aws ec2 describe-subnets --filtro Name=vpc-id,Values=vpc-0d1c1cf4e980ac593 | jq -r '.Subnets[]|.SubnetId+" "+.CidrBlock+" "+(.Tags[]|select(.Key=="Name").Value)' aws ec2 describe-subnets --filters Name=vpc-id,Values=vpc-0d1c1cf4e980ac593 | jq -r '.Subnets[]|.SubnetId+" "+.CidrBlock+" "+(.Tags[]|select(.Key=="Name").Value)'
Lista de grupos de seguridad Lista de grupos de seguridad
aws ec2 describe-security-groups | jq -r '.SecurityGroups[]|.GroupId+" "+.GroupName' aws ec2 describe-security-groups | jq -r '.SecurityGroups[]|.GroupId+" "+.GroupName'
Imprimir los grupos de seguridad de una instancia Mostrar los grupos de seguridad de una instancia
aws ec2 describe-instancias --instancia-ids i-0dae5d4daa47fe4a2 | jq -r '.Reservas[].Instancias[].SecurityGroups[]|.GroupId+" "+.GroupName' aws ec2 describe-instancias --instancia-ids i-0dae5d4daa47fe4a2 | jq -r '.Reservas[].Instancias[].SecurityGroups[]|.GroupId+" "+.GroupName'
@ -177,7 +326,7 @@ Editar los grupos de seguridad de una instancia
aws ec2 modify-instance-attribute --instance-id i-0dae5d4daa47fe4a2 --groups sg-02a63c67684d8deed sg-0dae5d4daa47fe4a2 aws ec2 modify-instance-attribute --instance-id i-0dae5d4daa47fe4a2 --groups sg-02a63c67684d8deed sg-0dae5d4daa47fe4a2
Imprimir las reglas del grupo de seguridad como *FromAddress* y *ToPort* Mostrar las reglas del grupo de seguridad como *FromAddress* y *ToPort*
aws ec2 describe-security-groups --group-ids sg-02a63c67684d8deed | jq -r '.SecurityGroups[].IpPermissions[]|. as $parent|(.IpRanges[].CidrIp+" "+($parent.ToPort|tostring))' aws ec2 describe-security-groups --group-ids sg-02a63c67684d8deed | jq -r '.SecurityGroups[].IpPermissions[]|. as $parent|(.IpRanges[].CidrIp+" "+($parent.ToPort|tostring))'
@ -197,7 +346,48 @@ Eliminar grupo de seguridad
aws ec2 delete-security-group --group-id sg-02a63c67684d8deed aws ec2 delete-security-group --group-id sg-02a63c67684d8deed
Traducción realizada con la versión gratuita del traductor www.DeepL.com/Translator FSC
---
Ejemplo backup:
aws fsx create-backup file-system-id xxxxxxxxxxxxx
Mostrar backups
aws fsx describe-backups
ECR
---
Describir el registro privado:
aws ecr describe-registries
Describir repositorios
aws ecr describe-repositories
Listar las imágenes de un repositorio
aws ecr list-images repository-name <nombre-repositorio>
Crear un repositorio
aws ecr create-repository --repository-name <nombre-repositorio>
Se pueden subir imágenes con AWS CLI pero el mismo AWS recomienda que se use el comandos DOCKER.
Los comandos que tienen que ver con el subcomando ecr-public solo funcionan en la region us-east-1, con lo que hay que especificarla para poder utilizarlos.
Describir el registro público
aws ecr-public describe-registries --region us-east-1
Mostrar los repositorios
aws ecr-public describe-repositories --region us-east-1
ECS ECS
--- ---
@ -210,6 +400,7 @@ Crear un servicio ECS
aws ecs create-service aws ecs create-service
EKS EKS
--- ---
@ -237,6 +428,14 @@ Desetiquetar un recurso
aws eks untag-resource --resource-arn (resource_ARN) --tag-keys (tag-key) aws eks untag-resource --resource-arn (resource_ARN) --tag-keys (tag-key)
Listar los grupos de nodos de un clúster
aws eks list-nodegroups cluster-name <nombre-cluster>
Información sobre un grupo de nodos
aws eks describe-nodegroup --cluster-name <nombre-cluster> --nodegroup <nombre-nodegroup>
ElastiCache ElastiCache
----------- -----------
@ -285,6 +484,19 @@ Buscar instancias para un grupo de destino
aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:ap-northwest-1:20394823094:targetgroup/wordpress-ph/203942b32a23 | jq -r '.TargetHealthDescriptions[ ] | .Target.Id' aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:ap-northwest-1:20394823094:targetgroup/wordpress-ph/203942b32a23 | jq -r '.TargetHealthDescriptions[ ] | .Target.Id'
Mostrar Listeners
aws elbv2 describe-listeners --load-balancer-arn arn:aws:elasticloadbalancing:eu-west-3:992365247711:loadbalancer/app/BalanceadorWEBParis/55c6c9cc0aefe3dc
Mostrar regla
aws elbv2 describe-rules --listener-arn arn:aws:elasticloadbalancing:eu-west-3:992365247711:listener/app/BalanceadorWEBParis/55c6c9cc0aefe3dc/12aa82e9221fed60
Identificar una regla en concretoç
aws elbv2 delete-rule --rule-arn arn:aws:elasticloadbalancing:eu-west-3:992365247711:listener-rule/app/BalanceadorWEBParis/55c6c9cc0aefe3dc/12aa82e9221fed60/76519d748f2250a1
Grupo IAM Grupo IAM
--------- ---------
@ -312,6 +524,10 @@ Listar políticas para un grupo
aws iam list-attached-group-policies --group-name (groupname) aws iam list-attached-group-policies --group-name (groupname)
Para crear una políticas:
aws iam create-policy --policy-name politica-desde-cli--01 policy-document [Podría subirlo desde un bucket con el arn y los permisos adecuado. O desde local con file://nombredocumento]
Añadir una política a un grupo Añadir una política a un grupo
aws iam attach-group-policy --nombre-del-grupo (nombre-del-grupo) --policy-arn arn:aws:iam::aws:policy/examReadOnlyAccess aws iam attach-group-policy --nombre-del-grupo (nombre-del-grupo) --policy-arn arn:aws:iam::aws:policy/examReadOnlyAccess
@ -406,16 +622,37 @@ Listar las instancias de la DB
aws rds describe-db-instances | jq -r '.DBInstances[ ] | .DBInstanceIdentifier+" "+.DBInstanceClass+" "+.Endpoint.Address' aws rds describe-db-instances | jq -r '.DBInstances[ ] | .DBInstanceIdentifier+" "+.DBInstanceClass+" "+.Endpoint.Address'
Tomar una instantánea de la instancia de la BBDD Crear snapshot de la instancia de la BBDD
aws rds create-db-snapshot --db-snapshot-identifier snapshot-1 --db-instance-identifier dev-1 aws rds create-db-snapshot --db-snapshot-identifier snapshot-1 --db-instance-identifier dev-1
Mostrar snapshot
aws rds describe-db-snapshots --db-snapshot-identifier snapshot-1 --db-instance-identifier general aws rds describe-db-snapshots --db-snapshot-identifier snapshot-1 --db-instance-identifier general
Tomar la instantánea del clúster de la BBDD Tomar la instantánea del clúster de la BBDD
aws rds create-db-cluster-snapshot --db-cluster-snapshot-identifier aws rds create-db-cluster-snapshot --db-cluster-snapshot-identifier
Crear una base de datos RDS de tipo Mysql
aws rds create-db-instance db-instance-identifier db-20 --db-instance-class db.t3.micro --engine mysql master-username admin1 --master-user-password lepanto1 --allocated-storage 20
Borrar el snapshot
aws rds delete-db-snapshot --db-snapshot-identifier snp-11
Borrar la Base de datos
aws rds delete-db-instance --db-instance-identifier db-02 --skip-final-snapshot
También se puede pedir el nombre de la snapshot, si sabemos concretarla, meterla en una variable bash y utilizarla para borrar:
snapshot=$(aws rds describe-db-snapshots --snapshot-type manual --query DBSnapshots[*].DBSnapshotIdentifier --output text)
aws rds delete-db-snapshot --db-snapshot-identifier $snapshot
Route53 Route53
------- -------
@ -540,6 +777,38 @@ Compartir el objeto S3 sin acceso público
aws s3 presign s3://bucket-name/file-name --expires-in (time value) aws s3 presign s3://bucket-name/file-name --expires-in (time value)
https://bucket-name.s3.amazonaws.com/file-name.pdf?AWSAccessKeyId=(key)&Expires=(value)&Signature=(value) https://bucket-name.s3.amazonaws.com/file-name.pdf?AWSAccessKeyId=(key)&Expires=(value)&Signature=(value)
Se puede mezclar con un script de Linux. Por ejemplo, para subir todos los ficheros del directorio local:
```
for i in *
do
aws s3 cp $i s3://vergara-bucket/Docs/
done
```
Una alternativa es el subcomando `s3api` que quizá tenga una sintaxis más parecida a lo general en AWS CLI
listar los buckets:
aws s3api list-buckets
Para crear un bucket:
aws s3api create-bucket --bucket nombre-del-nuevo-bucket --region eu-west-3 --create-bucket-configuration LocationConstraint=eu-west-3
CUIDADO: Si no ponemos la region lo creará en us-east-1. Y si no ponemos la configuración del bucket no permite crearlo.
Para subir un objeto:
aws s3api put-object --bucket nombre-bucket --key nombre-fichero-en-destino body nombre-fichero-actual
Para listar objetos:
aws s3api list-objects --bucket nombre-bucket
Para el plano de control podemos utilizar `s3control`
Para las operaciones de S3 on Outposts `s3outposts`
SNS SNS
--- ---
@ -553,9 +822,34 @@ Lista de topic SNS y suscripciones relacionadas
Publicar en el topic SNS Publicar en el topic SNS
aws sns publish --topic-arn arn:aws:sns:ap-southeast-1:232398:backend-api-monitoring aws sns publish --topic-arn arn:aws:sns:ap-southeast-1:232398:backend-api-monitoring
Listar las suscripciones
aws sns list-subscriptions
Crear un topic
aws sns create-topic --name Nombre-del-topic
Asociar suscripción con un topic
aws sns subscribe --topic-arn ARN-del-topic --protocol [http | https | email | email-json | sms | sqs | application | lambda | firehose] --notification-endpoint Correo-electronico-o-telefono-o…
Desasociar suscripción de un topic
aws sns unsubscribe -subscription-arn ARN-de-suscripción
Borrar Topic
aws sns delete-topic --topic-arn Nombre-ARN-del-topic
Borrar endpoint
aws sns delete-endpoint
SQS SQS
--- ---
@ -588,7 +882,61 @@ Borrar cola
aws sqs delete-queue --queue-url (url) aws sqs delete-queue --queue-url (url)
Filtros de las filas
--------------------
Filtrar según los datos que queremos mostrar. Ejemplos de opciones del comando ec2:
`--filters <value>` Filtrar elementos (ver opciones: https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-subnets.html#options) Se debe seguir las opciones de la doc. Ejemplo sintaxis general:
aws ec2 describe-subnets --filters "Name=state, Values=available" "Name=vpc-id, Values=vpc-06efefd12f7a7228f"
`[--subnet-ids <value>]` Mostrar una subnet o varias por Ids
`[--dry-run | --no-dry-run]`
`[--cli-input-json | --cli-input-yaml]`
`[--starting-token <value>]` A partir de qué elemento se empieza a listar
`[--page-size <value>]` Determinar el tamaño de la página
`[--max-items <value>]` Máximo de elementos a visualizar
`[--generate-cli-skeleton <value>]`
Filtros de columnas. Opción Query
---------------------------------
Filtrar según los metadatos que queremos mostrar. El comando es `--query`. Ejemplos para filtrar subnets:
Filtrar subnets por array (Empieza en 0)
aws ec2 describe-subnets --query 'Subnets[1]'
Filtrar por rango del array
aws ec2 describe-subnets --query 'Subnets[1:3]'
Filtrar por key del array. El punto concatena el query
aws ec2 describe-subnets --query 'Subnets[*].AvailabilityZone'
Filtrar dos campos de dentro del array
aws ec2 describe-subnets --query 'Subnets[].[SubnetId, CidrBlock]'
En VPC. Filtrar con tres columnas
aws ec2 describe-vpcs --query 'Vpcs[].[VpcId,State,IsDefault]' --output table
Poner labels para identificar los campos
aws ec2 describe-vpcs --query 'Vpcs[].[{"Id de VPC":VpcId},{Estado:State},IsDefault]'
Si se pone labels en todos los campos se puede mostrar como tabla:
aws ec2 describe-vpcs --query 'Vpcs[].[{"Id de VPC":VpcId},{Estado:State},{"VPC por defecto":IsDefault}]' --output table
[Manuel Vergara](https://vergaracarmona.es) [Manuel Vergara](https://vergaracarmona.es)