diff --git a/README..md b/README..md deleted file mode 100644 index 158c8e4..0000000 --- a/README..md +++ /dev/null @@ -1,7 +0,0 @@ -# Cheat sheets - AWS CLI - -## En breve estará disponible -## Disculpen las molestías - - -[Manuel Vergara](https://vergaracarmona.es) \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..61e1969 --- /dev/null +++ b/README.md @@ -0,0 +1,594 @@ +Cheatsheet AWS CLI +================== + +¿Qué es la CLI de AWS? +---------------------- + +AWS CLI significa Amazon Web Services Command Line Interface. A la hora de gestionar tus servicios de AWS hay unas cuantas opciones en cuanto a herramientas. Dos de las opciones más comunes son el uso de la consola de AWS, o la CLI de AWS. La consola de AWS es una interfaz web a la que se accede para gestionar los servicios de AWS. En contraste con la consola de AWS es AWS CLI. Es una gran herramienta para gestionar los recursos de AWS en diferentes cuentas, regiones y entornos desde la línea de comandos. Te permite controlar los servicios manualmente o crear automatizaciones con scripts. + +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). + +**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. + +**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. + +**Consejo 3 - utilizar jq.** + +Esta hoja de trucos utiliza jq, un procesador JSON de línea de comandos ligero y flexible. Recomendamos encarecidamente su uso para la CLI de AWS. Puedes encontrar más información sobre él en el [repositorio de Github para ello](https://stedolan.github.io/jq/). + +Configurar +---------- + +Create profiles + + aws configure --profile profilename + +Format de salida + + aws configure output format {json, yaml, yaml-stream, text, table} + +Especificar Region AWS + + aws configure region (region-name) + +API Gateway +----------- + +Listar *API Gateway IDs* y nombres + + aws apigateway get-rest-apis | jq -r ‘.items[ ] | .id+” “+.name’ + +Listar *API Gateway keys* + + aws apigateway get-api-keys | jq -r ‘.items[ ] | .id+” “+.name’ + +Listar *API Gateway domain names* + + aws apigateway get-domain-names | jq -r ‘.items[ ] | .domainName+” “+.regionalDomainName’ + +Listar recursos para *API Gateway* + + aws apigateway get-resources --rest-api-id ee86b4cde | jq -r ‘.items[ ] | .id+” “+.path’ + +Encontrar el recurso Lambda para *API Gateway* + + aws apigateway get-integration --rest-api-id (id) --resource-id (resource id) --http-method GET | jq -r ‘.uri’ + +Amplify +------- + +Listar las aplicaciones de Amplify y el repositorio de fuentes + + aws amplify list-apps | jq -r '.apps[ ] | .name+" "+.defaultDomain+" + +CloudFront +---------- + +Listar las distribuciones y orígenes de CloudFront + + aws cloudfront list-distributions | jq -r '.DistributionList.Items[ ] | .DomainName+" "+.Origins.Items[0].DomainName' + +Crear una nueva invalidación + + aws cloudfront create-invalidation [distribution-id] + +CloudWatch +---------- + +Listar información sobre una alarma + + aws cloudwatch describe-alarms | jq -r '.MetricAlarms[ ] | .AlarmName+" "+.Namespace+" "+.StateValue' + +Eliminar una o varias alarmas (puede eliminar hasta 100 a la vez) + + aws cloudwatch delete-alarms --alarm-names (alarmnames) + +Cognito +------- + +Listar los IDs y nombres de los grupos de usuarios + + aws cognito-idp list-user-pools --max-results 60 | jq -r '.UserPools[ ] | .Id+" "+.Name' + +Listar el teléfono y el correo electrónico de todos los usuarios + + aws cognito-idp list-users --user-pool-id (resource) | jq -r '.Users[ ].Attributes | from_entries | .sub + " " + .phone_number + " " + .email' + +DynamoDB +-------- + +Listar las tablas de DynamoDB + + aws dynamodb list-tables | jq -r .TableNames [ ] + +Obtener todos los elementos de una tabla + + aws dynamodb scan --table-name events + +Obtener el recuento de elementos de una tabla + + aws dynamodb scan --table-name events --select count | jq .ScannedCount + +Obtener el elemento utilizando la clave + + aws dynamodb get-item --table-name events --key '{"email"""email@example.com"}}' + +Obtener campos específicos de un elemento + + aws dynamodb get-item --table-name events --key '{"email"" email@example.com"}}' --attributes-to-get event_type + +Eliminar un elemento utilizando la clave + + aws dynamodb delete-item --table-name events --key '{"email""email@domain.com"}}' + +EBS +--- + +Completar una instantánea + + aws ebs complete-snapshot (snapshot-id) + +Iniciar una instantánea + + aws ebs start-snapshot --volume-size (valor) + +Obtener un bloque de Snapshot + + aws ebs get-snapshot-block + + --snapshot-id (valor) + + --block-index (valor) + + --block-token (valor) + +EC2 +--- + +Listar el ID, el tipo y el nombre de la instancia + + aws ec2 describe-instancias | jq -r '.Reservas[].Instances[]|.InstanceId+" "+.InstanceType+" "+(.Etiquetas[] | select(.Clave == "Nombre").Valor)' + +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)' + +Lista de VPCs y bloque de IPs CIDR + + aws ec2 describe-vpcs | jq -r '.Vpcs[]|.VpcId+" "+(.Tags[]|select(.Key=="Name").Value)+" "+.CidrBlock' + +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)' + +Lista de grupos de seguridad + + aws ec2 describe-security-groups | jq -r '.SecurityGroups[]|.GroupId+" "+.GroupName' + +Imprimir los grupos de seguridad de una instancia + + aws ec2 describe-instancias --instancia-ids i-0dae5d4daa47fe4a2 | jq -r '.Reservas[].Instancias[].SecurityGroups[]|.GroupId+" "+.GroupName' + +Editar los grupos de seguridad de una instancia + + 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* + + aws ec2 describe-security-groups --group-ids sg-02a63c67684d8deed | jq -r '.SecurityGroups[].IpPermissions[]|. as $parent|(.IpRanges[].CidrIp+" "+($parent.ToPort|tostring))' + +Añadir regla al grupo de seguridad + + aws ec2 authorize-security-group-ingress --group-id sg-02a63c67684d8deed --protocolo tcp --puerto 443 --cidr 35.0.0.1 + +Eliminar la regla del grupo de seguridad + + aws ec2 revoke-security-group-ingress --group-id sg-02a63c67684d8deed --protocolo tcp --port 443 --cidr 35.0.0.1 + +Editar las reglas del grupo de seguridad + + aws ec2 update-security-group-rule-descriptions-ingress --group-id sg-02a63c67684d8deed --ip-permissions 'ToPort=443,IpProtocol=tcp,IpRanges=[{CidrIp=202.171.186.133/32,Description=Home}]' + +Eliminar grupo de seguridad + + aws ec2 delete-security-group --group-id sg-02a63c67684d8deed + +Traducción realizada con la versión gratuita del traductor www.DeepL.com/Translator + +ECS +--- + +Crear un clúster ECS + + aws ecs create-cluster --cluster-name=NAME --generate-cli-skeleton + +Crear un servicio ECS + + aws ecs create-service + +EKS +--- + +Crear un cluster + + aws eks create-cluster --name (nombre del cluster) + +Eliminar un cluster + + aws eks delete-cluster --nombre (nombre del cluster) + +Listar información descriptiva de un cluster + + aws eks describe-cluster --nombre (nombre del cluster) + +Listar clusters en su región por defecto + + aws eks list-clusters + +Etiquetar un recurso + + aws eks tag-resource --resource-arn (resource_ARN) --tags (etiquetas) + +Desetiquetar un recurso + + aws eks untag-resource --resource-arn (resource_ARN) --tag-keys (tag-key) + +ElastiCache +----------- + +Obtener información sobre un clúster de caché específico + + aws elasticache describe-cache-clusters | jq -r '.CacheClusters[ ] | .CacheNodeType+" "+.CacheClusterId' + +Lista de grupos de replicación de ElastiCache + + aws elasticache describe-replication-groups | jq -r '.ReplicationGroups [ ] | .ReplicationGroupId+" "+.NodeGroups[ ].PrimaryEndpoint.Address' + +Lista de instantáneas de ElastiCache + + aws elasticache describe-snapshots | jq -r '.Snapshots[ ] | .SnapshotName' + +Crear una instantánea de ElastiCache + + aws elasticache create-snapshot --snapshot-name backend-login-hk-snap-1 --replication-group-id backend-login-hk --cache-cluster-id backend-login-hk + +Eliminar la instantánea de ElastiCache + + aws elasticache delete-snapshot --snapshot-name login-snap-1 + +Aumentar/reducir la réplica de ElastiCache + + aws elasticache increase-replica-count --replication-group-id backend-login --apply-immediately + + aws elasticache decrease-replica-count --replication-group-id backend-login --apply-immediately + +ELB +--- + +Lista de nombres de host del ELB + + aws elbv2 describe-load-balancers --query 'LoadBalancers[*].DNSName' | jq -r 'to_entries[ ] | .value' + +Listar los ARNs de los ELBs + + aws elbv2 describe-load-balancers | jq -r '.LoadBalancers[ ] | .LoadBalancerArn' + +Lista de ARNs de grupos de destino de ELB + + aws elbv2 describe-target-groups | jq -r '.TargetGroups[ ] | .TargetGroupArn' + +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' + +Grupo IAM +--------- + +Lista de grupos + + aws iam list-groups | jq -r .Groups[ ].GroupName + +Añadir/borrar grupos + + aws iam create-group --group-name (groupName) + +Listar políticas y ARNs + + aws iam list-policies | jq -r '.Policies[ ]|.PolicyName+" "+.Arn' + + aws iam list-policies --scope AWS | jq -r '.Policies[ ]|.PolicyName+" "+.Arn' + + aws iam list-policies --scope Local | jq -r '.Policies[ ]|.PolicyName+" "+.Arn' + +Listar usuarios/grupos/roles para una política + + aws iam list-entities-for-policy --policy-arn arn:aws:iam:2308345:policy/example-ReadOnly + +Listar políticas para un grupo + + aws iam list-attached-group-policies --group-name (groupname) + +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 + +Añadir un usuario a un grupo + + aws iam add-user-to-group --group-name (groupname) --user-name (username) + +Eliminar un usuario de un grupo + + aws iam remove-user-from-group --nombre-grupo (nombre-grupo) --nombre-usuario (nombre-usuario) + +Listar los usuarios de un grupo + + aws iam get-group --nombre-del-grupo (nombre-del-grupo) + +Listar los grupos de un usuario + + aws iam list-groups-for-user --nombre-usuario (nombre-usuario) + +Adjuntar/eliminar la política a un grupo + + aws iam attach-group-policy --nombre-del-grupo (nombre-del-grupo) --policy-arn arn:aws:iam::aws:policy/DynamoDBFullAccess + + aws iam detach-group-policy --group-name (groupname) --policy-arn arn:aws:iam::aws:policy/DynamoDBFullAccess + +Usuario IAM +-------- + +Listar *userId* y *UserName* + + aws iam list-users | jq -r '.Users[ ]|.UserId+" "+.UserName' + +Obtener un solo usuario + + aws iam get-user --user-name (nombre-de-usuario) + +Añadir usuario + + aws iam create-user --user-name (nombre-de-usuario) + +Eliminar usuario + + aws iam delete-user --user-name (nombre-usuario) + +Listar las claves de acceso del usuario + + aws iam list-access-keys --user-name (nombre-de-usuario) | jq -r .AccessKeyMetadata[ ].AccessKeyId + +Eliminar la clave de acceso del usuario + + aws iam delete-access-key --user-name (nombre-de-usuario) --id-de-clave-de-acceso (accessKeyID) + +Activar/desactivar la clave de acceso del usuario + + aws iam update-access-key --status Active --user-name (username) --access-key-id (access key) + + aws iam update-access-key --status Inactive --user-name (username) --access-key-id (access key) + +Generar una nueva clave de acceso para el usuario + + aws iam create-access-key --user-name (nombre-de-usuario) | jq -r '.AccessKey | .AccessKeyId+" "+.SecretAccessKey' + +Lambda +------ + +Lista de funciones Lambda, tiempo de ejecución y memoria + + aws lambda list-functions | jq -r '.Functions[ ] | .FunctionName+" "+.Runtime+" "+(.MemorySize|tostring)' + + +Lista de capas de Lambda + + aws lambda list-layers | jq -r '.Layers[ ] | .LayerName' + +Lista de eventos de origen para Lambda + + aws lambda list-event-source-mappings | jq -r '.EventSourceMappings[ ] | .FunctionArn+" "+.EventSourceArn' + +Descargue el código Lambda + + aws lambda get-function --function-name DynamoToSQS | jq -r .Code.Location + +RDS +--- + +Lista de clusters de BD + + aws rds describe-db-clusters | jq -r '.DBClusters[ ] | .DBClusterIdentifier+" "+.Endpoint' + +Listar las instancias de la DB + + aws rds describe-db-instances | jq -r '.DBInstances[ ] | .DBInstanceIdentifier+" "+.DBInstanceClass+" "+.Endpoint.Address' + +Tomar una instantánea de la instancia de la BBDD + + aws rds create-db-snapshot --db-snapshot-identifier snapshot-1 --db-instance-identifier dev-1 + + aws rds describe-db-snapshots --db-snapshot-identifier snapshot-1 --db-instance-identifier general + +Tomar la instantánea del clúster de la BBDD + + aws rds create-db-cluster-snapshot --db-cluster-snapshot-identifier + +Route53 +------- + +Crear zona alojada + + aws route53 create-hosted-zone --name exampledomain.com + +Eliminar zona alojada + + aws route53 delete-hosted-zone --id ejemplo + +Obtener zona alojada + + aws route53 get-hosted-zone --id ejemplo + +Listar zonas alojadas + + aws route53 list-hosted-zones + +Crear un conjunto de registros - Para ello, primero tendrá que crear un archivo JSON con una lista de elementos de cambio en el cuerpo y utilizar la acción CREATE. Por ejemplo, el archivo JSON tendría el siguiente aspecto + + { + "Comment": "CREATE/DELETE/UPSERT a record", + "Changes": [{ + "Action": "CREATE", + "ResourceRecordSet":{ + "Name": "a.example.com", + "Type": "A", + "TTL": 300, + "ResourceRecords":[{"Value":"4.4.4.4"}] + }}] + } + + +Una vez que tengas un archivo JSON con la información correcta como la anterior podrás introducir el comando + + aws route53 change-resource-record-sets --hosted-zone-id (zone-id) --change-batch file://exampleabove.json + +Actualizar un conjunto de registros - Para ello, primero tendrá que crear un archivo JSON con una lista de elementos de cambio en el cuerpo y utilizar la acción UPSERT. Esto creará un nuevo conjunto de registros con el valor especificado, o actualizará un conjunto de registros si ya existe. Por ejemplo, el archivo JSON tendría el siguiente aspecto + + { + "Comment": "CREATE/DELETE/UPSERT a record", + "Changes": [{ + "Action": "UPSERT", + "ResourceRecordSet":{ + "Name": "a.example.com", + "Type": "A", + "TTL": 300, + "ResourceRecords": [{"Value":"4.4.4.4"}] + }}] + } + + +Una vez que tengas un archivo JSON con la información correcta como la anterior podrás introducir el comando + + aws route53 change-resource-record-sets --hosted-zone-id (zone-id) --change-batch file://exampleabove.json + +Eliminar un conjunto de registros - Para ello, primero tendrá que crear un archivo JSON con una lista de los valores del conjunto de registros que desea eliminar en el cuerpo y utilizar la acción DELETE. Por ejemplo, el archivo JSON tendría el siguiente aspecto + + { + "Comment": "CREATE/DELETE/UPSERT a record", + "Changes": [{ + "Action": "DELETE", + "ResourceRecordSet": { + "Name": "a.example.com", + "Type": "A", + "TTL": 300, + "ResourceRecords": [{"Value":"4.4.4.4"}] + }}] + } + + +Una vez que tengas un archivo JSON con la información correcta como la anterior podrás introducir el siguiente comando. + + aws route53 change-resource-record-sets --hosted-zone-id (zone-id) --change-batch file://exampleabove.json + +S3 +-- + +Lista de buckets + + aws s3 ls + +Listar archivos en un Bucket + + aws s3 ls s3://mybucket + +Crear un Bucket + + aws s3 mb s3://bucket-name + make_bucket: bucket-name + +Borrar Bucket + + aws s3 rb s3://bucket-name --force + +Descargar el objeto S3 en local + + aws s3 cp s3://bucket-name + download: ./backup.tar from s3://bucket-name/backup.tar + +Subir el archivo local como objeto S3 + + aws s3 cp backup.tar s3://bucket-name + upload: ./backup.tar to s3://bucket-name/backup.tar + +Eliminar el objeto S3 + + aws s3 rm s3://bucket-name/secret-file.gz . + delete: s3://bucket-name/secret-file.gz + +Descargar el bucket a local + + aws s3 sync s3://bucket-name/ /media/pasport-ultra/backup + +Subir el directorio local al Bucket + + aws s3 sync (directory) s3://bucket-name/ + +Compartir el objeto S3 sin acceso público + + 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) + +SNS +--- + +Lista de topics SNS + + aws sqs list-queues | jq -r ‘.QueueUrls[ ]’ + +Lista de topic SNS y suscripciones relacionadas + + aws sns list-subscriptions | jq -r '.Subscriptions[ ] | .TopicArn+" "+.Protocol+" "+.Endpoint' + +Publicar en el topic SNS + + + aws sns publish --topic-arn arn:aws:sns:ap-southeast-1:232398:backend-api-monitoring + + +SQS +--- + +Listar queues + + aws sqs list-queues | jq -r '.QueueUrls[ ]' + +Crear queue + + aws sqs create-queue --queue-name public-events.fifo | jq -r .queueURL + +Enviar mensaje + + aws sqs send-message --queue-url (url) --message-body (mensaje) + +Recibir mensaje + + aws sqs receive-message --queue-url (url) | jq -r '.Messages[ ] | .Body' + +Borrar mensaje + + aws sqs delete-message --queue url (url) --receipt-handle (receipt handle) + +Purgar la cola + + aws sqs purge-queue --queue-url (url) + +Borrar cola + + aws sqs delete-queue --queue-url (url) + + + + +[Manuel Vergara](https://vergaracarmona.es) \ No newline at end of file