La interfaz de línea de comandos (CLI) de AWS es una herramienta unificada para administrar sus servicios de AWS. Con solo una herramienta para descargar y configurar, puede controlar varios servicios de AWS desde la línea de comandos y automatizarlos a través de scripts. Este artículo cubre cómo usar AWS CLI para administrar depósitos y objetos de Amazon S3 con muchos ejemplos que puede usar durante sus actividades diarias de AWS.
Además de AWS CLI, recomendamos enfáticamente instalar aws-shell. Este programa de shell de línea de comandos proporciona funciones prácticas y productivas para ayudar a los usuarios nuevos y avanzados de la interfaz de línea de comandos de AWS. Las características clave incluyen lo siguiente:
Y, por último, le recomendamos que instale el complemento Session Manager para AWS CLI, que le permite utilizar la interfaz de línea de comandos de AWS (AWS CLI) para iniciar y finalizar sesiones que lo conectan con sus instancias EC2.
Puede instalar AWS CLI en Windows, macOS y Linux. Además de eso, Amazon Linux AMI ya contiene AWS CLI como parte de la distribución del sistema operativo, por lo que no tiene que instalarlo manualmente.
Para las distribuciones modernas de Windows, le recomendamos que utilice el administrador de paquetes Chocolatey para instalar AWS CLI:
Para instalar AWS CLI en macOS, le recomendamos que utilice el administrador de paquetes brew:
Dependiendo de su distribución de Linux, los pasos de instalación son diferentes.
Para distribuciones basadas en YUM (CentOS, Fedora, RHEL), puede utilizar los siguientes pasos de instalación:
Para distribuciones basadas en APT (Debian, Ubuntu), puede usar pasos de instalación ligeramente diferentes:
Para otras distribuciones de Linux, puede usar los pasos de instalación manual de AWS CLI.
s3 | s3api | s3control |
Estos comandos están diseñados específicamente para facilitar la administración de sus archivos S3 mediante la CLI. | Estos comandos se generan a partir de modelos JSON, que modelan directamente las API de los distintos servicios de AWS. Esto permite que la CLI genere comandos que son un mapeo casi uno a uno de la API del servicio | Estos comandos le permiten administrar el plano de control de Amazon S3 |
aws s3 ls | aws s3api list-objects-v2 --bucket my-bucket | aws s3control list-jobs --account-id 123456789012 |
Si desea ver cómo utilizar estos comandos para interactuar con los puntos de enlace de la VPC, consulte nuestro artículo Automatización del acceso a puntos de enlace de la VPC de varias regiones mediante Terraform.
Comandos de la CLI de AWS S3
Por lo general, usa los comandos de la CLI de AWS para administrar S3 cuando necesita automatizar las operaciones de S3 mediante scripts o en su canalización de automatización de CICD. Por ejemplo, puede configurar la canalización de Jenkins para ejecutar comandos de AWS CLI para cualquier cuenta de AWS en su entorno.
Esta sección del artículo cubrirá los ejemplos más comunes del uso de comandos de AWS CLI para administrar objetos y depósitos de S3.
Gestionar depósitos S3
AWS CLI admite operaciones de creación, lista y eliminación para la administración de depósitos de S3.
Crear depósito S3
Para crear un depósito de S3 con AWS CLI, debe usar aws s3 mb
(m ake b cubo) comando:
aws s3 mb s3://hands-on-cloud-example-1
Nota :El nombre del depósito S3 siempre debe iniciarse desde s3://
prefijo.
Para crear un depósito de S3 mediante AWS CLI en la región específica de AWS, debe agregar --region
argumento del comando anterior:
aws s3 mb s3://hands-on-cloud-example-2 --region us-east-2
Lista de depósitos de S3
Para enumerar depósitos de S3 mediante AWS CLI, puede utilizar aws s3 ls
o aws s3api list-buckets
comandos.
aws s3 ls
Los aws s3api list-buckets
el comando produce JSON como salida:
aws s3api list-buckets
Usando aws s3api
El comando le permite usar --query
parámetro para realizar consultas JMESPath para miembros y valores específicos en la salida JSON.
Generemos solo cubos cuyos nombres comienzan con hands-on-cloud-example
:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].Name'
Podemos extender el comando anterior para generar solo nombres de depósitos S3:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].[Name]' \
--output text
Eliminar depósito S3
Para eliminar el depósito de S3 mediante AWS CLI, puede utilizar aws s3 rb
o aws s3api delete-bucket
comandos.
aws s3 rb s3://hands-on-cloud-example-1
Nota :solo puede eliminar cubos S3 vacíos
Si su depósito S3 contiene objetos, puede usar --force
argumento para limpiar el cubo antes de la eliminación:
aws s3 rb s3://hands-on-cloud-example-2 --force
Nota :el --force
El argumento no elimina los objetos versionados, lo que provocaría un error en la eliminación del depósito.
Para eliminar el depósito de S3 con el control de versiones de objetos habilitado, primero debe limpiarlo:
export bucket_name="hands-on-cloud-versioning-enabled"
# Deleting objects versions
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"
# Deleting delete markers
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Contents[].{Key:Key,VersionId:VersionId}}')"
# Deleting S3 bucket
aws s3 rb s3://$bucket_name
Administración de objetos S3
En esta sección del artículo, cubriremos las operaciones más comunes de la CLI de AWS para administrar objetos de S3.
Subir archivo al depósito S3
Para cargar un archivo en el depósito de S3 mediante AWS CLI, debe usar ether aws s3 cp
comando:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1
Si es necesario, puede cambiar el nombre del objeto S3 cargado durante la operación de carga:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1/image.png
Además de eso, puede especificar la clase de almacenamiento S3 durante la carga:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --storage-class ONEZONE_IA
Parámetros admitidos para --storage-class
argumento son:
- ESTÁNDAR:predeterminado, estándar de Amazon S3
- REDUCED_REDUNDANCY:almacenamiento con redundancia reducida de Amazon S3
- STANDARD_IA:acceso poco frecuente estándar de Amazon S3
- ONEZONE-IA:acceso poco frecuente de una zona de Amazon S3
- INTELLIGENT_TIERING:nivelación inteligente de Amazon S3
- GLACIAR:Amazon S3 Glacier
- DEEP_ARCHIVE:archivo profundo de Amazon S3 Glacier
Si el archivo debe cifrarse con el cifrado SSE predeterminado, debe proporcionar --sse
argumento:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse AES256
Para el cifrado KMS, use el siguiente comando:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse 'aws:kms' --sse-kms-key-id KMS_KEY_ID
Nota :reemplazar KMS_KEY_ID
en el comando anterior con su propia ID de clave KMS.
Subir varios archivos al depósito S3
Para cargar varios archivos en el depósito de S3, debe usar aws s3 cp
comando con --recursive
argumento o aws s3 sync
comando.
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive
Nota :el comando anterior no cargará directorios vacíos si existen dentro del ./directory
ruta (no creará los objetos S3 para representarlos).
Puede usar los mismos argumentos que en los ejemplos anteriores para configurar la clase de almacenamiento S3 o el cifrado si es necesario.
Además de eso, puede usar --include
y --exclude
argumentos para especificar un conjunto de archivos para cargar.
Por ejemplo, si necesita copiar solo .png
archivos del ./directory
, puede usar el siguiente comando:
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive --exclude "*" --include "*.png"
Puede lograr el mismo resultado utilizando aws s3 sync
comando:
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory
Nota :la sincronización de aws s3 sync
El comando admite los mismos argumentos para configurar la clase de almacenamiento y el cifrado de S3.
El beneficio de usar aws s3 sync
El comando es que este comando cargará solo los archivos modificados de su sistema de archivos local en la próxima ejecución.
Puedes usar el --delete
argumento para eliminar objetos del depósito S3 si se eliminaron en su sistema de archivos local (sincronización completa):
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory --delete
Descargar archivo del depósito S3
Para descargar un único archivo del depósito S3 mediante AWS CLI, debe utilizar aws s3 cp
comando:
aws s3 cp s3://hands-on-cloud-example-1/image.png ./image.png
Descargar varios archivos del depósito S3
Para descargar varios archivos del depósito S3 mediante AWS CLI, debe utilizar aws s3 cp
o aws s3 sync
comando:
aws s3 cp s3://hands-on-cloud-example-1/directory ./directory --recursive
Nota :si el depósito S3 contiene "directorios" vacíos dentro del /directory
prefijo, la ejecución del comando anterior creará directorios vacíos en su sistema de archivos local.
De manera similar a la operación de carga, puede sincronizar todos los objetos del depósito S3 dentro del prefijo común a su directorio local:
aws s3 sync s3://hands-on-cloud-example-1/directory ./directory
Nota :para ambos comandos (aws s3 cp
y aws s3 sync
) puede usar el --include
y --exclude
argumentos para descargar o sincronizar solo un conjunto específico de archivos.
Nota :usando --delete
argumento con aws s3 sync
El comando le permite obtener un espejo completo del prefijo de objetos S3 en su carpeta local.
Lista de archivos en el depósito S3
Para enumerar archivos en el depósito de S3 mediante AWS CLI, debe utilizar aws s3 ls
comando:
aws s3 ls s3://hands-on-cloud-example-1
Puede obtener tamaños de objetos legibles por humanos usando el --human-readable
argumento:
aws s3 ls s3://hands-on-cloud-example-1 --human-readable
Puedes usar el --recursive
argumento para enumerar todos los objetos de S3 dentro del depósito de S3 o que tengan el mismo prefijo:
# Recursive listing of the entire S3 bucket
aws s3 ls s3://hands-on-cloud-example-1 --recursive
# Recursive listing for the S3 prefix
aws s3 ls s3://hands-on-cloud-example-1/directory --recursive
Renombrar objeto S3
Para cambiar el nombre del objeto S3 usando AWS CLI, debe usar aws s3 mv
comando:
aws s3 mv s3://hands-on-cloud-example-1/image.png s3://hands-on-cloud-example-1/image2.png
Nota :no solo puede cambiar el nombre de los objetos de S3, sino también cambiar su clase de almacenamiento y cifrado, por ejemplo:
aws s3 mv s3://hands-on-cloud-example-1/image2.png s3://hands-on-cloud-example-1/image.png \
--sse AES256 --storage-class ONEZONE_IA
Renombrar "directorio" de S3
Para cambiar el nombre del "directorio" de S3 mediante AWS CLI, debe utilizar aws s3 mv
comando:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-1/directory2 --recursive
Nota :el --recursive
El argumento no mueve "directorios" vacíos dentro del "directorio" de S3 especificado, por lo que si espera un movimiento de "directorio" completo, es posible que deba volver a crear "directorios" vacíos en el directorio de destino (aws s3 put-object
comando) y elimínelos del directorio de origen (vea los ejemplos a continuación).
Crear un "directorio" S3 vacío
Para crear un "directorio" de S3 vacío mediante AWS CLI, debe utilizar el aws s3 put-object
comando:
aws s3api put-object --bucket hands-on-cloud-example-1 --key directory_name/
Nota :el /
Se requiere un carácter en el nombre del objeto para crear un directorio vacío. De lo contrario, el comando anterior creará un objeto de archivo con el nombre directory_name
.
Copiar/mover archivos entre depósitos S3
Para copiar archivos entre depósitos S3 mediante AWS CLI, debe utilizar aws s3 cp
o aws s3 sync
dominio. Para mover archivos entre depósitos de S3, debe usar aws s3 mv
comando.
Para copiar archivos entre depósitos de S3 dentro de la misma región de AWS:
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Si los depósitos S3 de origen y destino están ubicados en diferentes regiones de AWS, debe usar --source-region
y --region
(ubicación del depósito S3 de destino especificado) argumentos:
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Para mover objetos entre depósitos S3 dentro de la misma región, debe usar aws s3 mv
comando:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Si los depósitos S3 de origen y destino están ubicados en diferentes regiones de AWS, debe usar --source-region
y --region
(ubicación del depósito S3 de destino especificado) argumentos:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Nota :puede usar --storage-class
y --sse
argumentos para especificar la clase de almacenamiento y el método de cifrado en el depósito S3 de destino
Nota :puede usar --include
y --exclude
argumentos para seleccionar solo archivos específicos para copiar/mover desde el depósito de S3 de origen
Nota :el --recursive
El argumento no copia ni mueve "directorios" vacíos dentro del prefijo de S3 especificado, por lo que si espera una copia o movimiento de "directorio" completo, es posible que deba volver a crear "directorios" vacíos en el directorio de destino (aws s3 put-object
dominio). Consulte los ejemplos anteriores.
Para sincronizar "directorios" entre depósitos S3, debe usar aws s3 sync
comando, por ejemplo:
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory
Nota :puede usar argumentos como --storage-class
, --sse
, --include
y --exclude
con aws s3 sync
comando:
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory \
--region us-west-2 --source-region us-east-1 --sse AES256
Eliminación de objetos S3
Para eliminar objetos de S3 mediante AWS CLI, debe utilizar aws s3 rm
comando:
aws s3 rm s3://hands-on-cloud-example-1/image.png
Nota :puedes usar el --recursive
, --include
y --exclude
argumentos con aws s3 rm
comando.
Generar URL prefirmadas para objeto S3
Para generar la URL prefirmada para el objeto S3 mediante AWS CLI, debe usar aws s3 presign
comando:
aws s3 presign s3://hands-on-cloud-example-1/image.png --expires-in 604800
Nota :el argumento –expires-in define el tiempo de caducidad de la URL prefirmada en segundos entre 3600 (mínimo) y 604800 (máximo) segundos.
Ahora, puede usar la URL prefirmada generada para descargar el objeto S3 usando un navegador web o wget
comando, por ejemplo:
wget generated_presigned_url
O reemplace el objeto S3 usando curl
comando:
curl -H "Content-Type: image/png" -T image.png generated_presigned_url
Nota :si obtiene el The request signature we calculated does not match the signature you provided. Check your key and signing method.
mensaje de error, debe volver a generar su clave de acceso de AWS y su clave secreta de AWS. El motivo principal del error es que las credenciales de AWS contienen ciertos caracteres como +
, %
y /
.
Resumen
En este artículo, cubrimos cómo usar AWS CLI para administrar depósitos y objetos de Amazon S3 con muchos ejemplos que puede usar durante sus actividades diarias de AWS.