Hola compañeros de la shell,
En esta entrada vamos a revisar el listado de comandos que me han resultado útiles para trabajar con la CLI de AWS. Por supuesto, para tener el detalle completo, nada mejor que revisar la documentación oficial:
https://docs.aws.amazon.com/index.html
Sin más preámbulos, comenzamos:
# Muestra UserID Account ID y ARN de la cuenta AWS
aws sts get-caller-identity
# Describe instancias, filtra por nombre de la instancia y consulta el InstanceId
aws ec2 describe-instances --filters 'Name=tag:Name,Values=Processor' --query 'Reservations[0].Instances[0].InstanceId'
# Consulta instancias por nombre y filtra para obtener VolumeID
aws ec2 describe-instances --filter 'Name=tag:Name,Values=Processor' --query 'Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.{VolumeId:VolumeId}'
# Consulta los recursos de la cuenta filtrando por tag
aws resourcegroupstaggingapi get-resources --tag-filters "Key=Name_Of_Key,Values=Value_of_Key"
# Crea una imagen de una instancia EC2
aws ec2 create-image --name WebServer --instance-id i-033bd534173166dfb
# Para una instancia EC2
aws ec2 stop-instances --instance-ids i-0301ce898aa6d218c
#Espera hasta que la instancia para
aws ec2 wait instance-stopped --instance-id i-0301ce898aa6d218c
# Crear snapshot de volumen
aws ec2 create-snapshot --volume-id vol-054f2702f39cbf5fc
{
"Description": "",
"Tags": [],
"Encrypted": false,
"VolumeId": "vol-054f2702f39cbf5fc",
"State": "pending",
"VolumeSize": 8,
"StartTime": "2021-04-15T10:41:38.000Z",
"Progress": "",
"OwnerId": "546933575165",
"SnapshotId": "snap-08c5b1d429ce5a2ab"
}
# Esperar hasta que el snapshot se haya completado
aws ec2 wait snapshot-completed --snapshot-id snap-08c5b1d429ce5a2ab
# Arrancar instancia:
aws ec2 start-instances --instance-ids i-0301ce898aa6d218c
# Esperar a que la instancia esté arrancada
aws ec2 wait instance-running --instance-id i-0301ce898aa6d218c
# Crear un cronjob para guardar snapshot de datos cada minuto
echo "* * * * * aws ec2 create-snapshot --volume-id vol-054f2702f39cbf5fc 2>&1 >> /tmp/cronlog" > cronjob
# To schule the previous created cron job
crontab cronjob
# Detiene el job crontab
crontab -r
# Para comprobar los snapshots que se van creando de ese volumen
aws ec2 describe-snapshots --filters "Name=volume-id,Values=vol-054f2702f39cbf5fc"
# Lista los snapshots que corresponden a un volumen
aws ec2 describe-snapshots --filters "Name=volume-id, Values=vol-054f2702f39cbf5fc" --query 'Snapshots[*].SnapshotId'
# Eliminar AMI y sus EBS asociados
SNAPSHOTS=`aws ec2 describe-images --image-ids AMI-ID --region eu-west-1 --query 'Images[*].BlockDeviceMappings[*].Ebs.SnapshotId' --output text`
aws ec2 deregister-image --image-id AMI-ID
for SNAPSHOT in $SNAPSHOTS ; do aws ec2 delete-snapshot --snapshot-id $SNAPSHOT; done
# Eliminar Volume por volume id
aws ec2 delete-volume --volume-id
# Activar versionado en bucket
aws s3api put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Enabled
# Copia de fichero en bucket a local
aws s3 cp s3://lab_ema_test/fichero.txt ./
# Copia el contenido del directorio actual al bucket s3
aws s3 sync --delete . s3://test-lab-ema
# Copia el contenido del directorio actual al bucket s3 (y elimina los ficheros/directorios no presentes)
aws s3 sync --delete . s3://test-lab-ema
# Lista las versiones de ficheros de un bucket
aws s3api list-object-versions --bucket test-lab-ema
# Recupera una versión de un fichero de un bucket s3
aws s3api get-object --bucket test-lab-ema file3.txt_recuperado --key file3.txt --version-id ZP2BktVf3vEcLwAcY4Nnl.q5ddEg5IRW
# Contenido del bucket s3 remoto
aws s3 ls s3://test-lab-ema/
# Describe los volumenes de tu cuenta
aws ec2 describe-volumes
# Destruye instancias EC2 pasadas por parámetro
aws ec2 terminate-instances --instance-ids INSTANCE_ID
# Obtener log de una instancia EC2:
ec2 get-console-output --instance-id %id%
# Describe el nombre de las instancias EC2 de la cuenta
aws ec2 describe-instances --instance-ids %id% --query "Reservations[*].Instances[*].PublicDnsName"
# Describe el status de la instancia
aws ec2 describe-instance-status
## COST COMMANDS
# Coste mensual agrupado por servicio
aws ce get-cost-and-usage --time-period Start=2022-01-01,End=2022-11-01 --granularity MONTHLY --metrics "UnblendedCost" --group-by Type=DIMENSION,Key=SERVICE
# Coste Mensual para la cuenta (Ejemplo mes de Septiembre)
aws ce get-cost-and-usage --time-period Start="2022-09-01,End=2022-09-30" --granularity MONTHLY --metrics "BlendedCost"
# Coste Estimado (fecha de inicio debe ser al menos el dia de hoy)
aws ce get-cost-forecast --time-period Start="2022-10-01,End=2022-10-30" --granularity MONTHLY --metric "BLENDED_COST"
# Coste Mensual de la cuenta (Ejemplo mes de Septiembre) desagregado por servicios AWS
aws ce get-cost-and-usage --time-period Start="2022-09-01,End=2022-09-30" --granularity MONTHLY --metrics "BlendedCost" --group-by Type=DIMENSION,Key=SERVICE
# Coste Mensual Desagregado por TAG (el nombre de la tag por la que desagregamos en el ejemplo es "Name")
aws ce get-cost-and-usage --time-period Start="2022-09-01,End=2022-09-30" --granularity MONTHLY --metrics "BlendedCost" --group-by Type=TAG,Key=Name
# Coste mensual filtrado por S3
aws ce get-cost-and-usage \
--time-period Start=2022-09-01,End=2022-09-30 \
--granularity MONTHLY \
--metrics "BlendedCost" "UnblendedCost" "UsageQuantity" \
--group-by Type=DIMENSION,Key=SERVICE Type=TAG,Key=Environment \
--filter '{ "Dimensions": { "Key": "SERVICE", "Values": [ "Amazon Simple Storage Service" ] }}'
## END COST COMMANDS
Espero que os sirva.
Nos vemos al otro lado de la pantalla negra.
