GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar AWS CLI para administrar Amazon S3

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:

  • Finalizar automáticamente de forma aproximada para comandos, opciones y recursos de la CLI de AWS
  • Documentación dinámica en línea
  • Ejecución de comandos de shell del sistema operativo
  • Exportar comandos ejecutados a un editor de texto

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.

Instalación de la CLI de AWS

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.

Windows

Para las distribuciones modernas de Windows, le recomendamos que utilice el administrador de paquetes Chocolatey para instalar AWS CLI:

# AWS CLI
choco install awscli

# Session Manager plugin
choco install awscli-session-manager

# AWS-Shell
choco install python
choco install pip
pip install aws-shell

macOS

Para instalar AWS CLI en macOS, le recomendamos que utilice el administrador de paquetes brew:

# AWS CLI
brew install awscli

# Session Manager plugin
brew install --cask session-manager-plugin

# AWS-Shell
pip install aws-shell

Linux

Dependiendo de su distribución de Linux, los pasos de instalación son diferentes.

CentOS, Fedora, RHEL

Para distribuciones basadas en YUM (CentOS, Fedora, RHEL), puede utilizar los siguientes pasos de instalación:

# AWS CLI
sudo yum update
sudo yum install wget -y
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install epel-release-latest-7.noarch.rpm
sudo yum -y install python-pip
sudo pip install awscli

# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" \
  -o "session-manager-plugin.rpm"
sudo yum install -y session-manager-plugin.rpm

# AWS-Shell
pip install aws-shell

Debian, Ubuntu

Para distribuciones basadas en APT (Debian, Ubuntu), puede usar pasos de instalación ligeramente diferentes:

# AWS CLI
sudo apt-get install python-pip
sudo pip install awscli

# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" \
  -o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb

# AWS-Shell
pip install aws-shell

Otras distribuciones de Linux

Para otras distribuciones de Linux, puede usar los pasos de instalación manual de AWS CLI.

Diferencia entre AWS s3, s3api y s3control

La principal diferencia entre el s3 ,  s3api y s3control los comandos son que el s3 los comandos son comandos de alto nivel creados sobre s3api de nivel inferior comandos controlados por los modelos JSON.

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.


Linux
  1. Cómo instalar AWS CLI en Ubuntu 20.04 Focal Fossa Linux

  2. Cómo instalar y usar Flatpak en Linux

  3. Cómo instalar MySQL 5.7 en Amazon Linux

  4. Cómo instalar AWS CLI en Ubuntu 20.04 LTS

  5. Cómo instalar awscli

Cómo instalar y usar phpMyAdmin en Linux

Cómo instalar AWS CLI en Debian 11 Bullseye Linux

Cómo instalar Rocky Linux 8 en la instancia Amazon AWS Ec2

Cómo instalar y usar WP CLI en Linux

Cómo instalar y usar WP-CLI para administrar WordPress

Cómo instalar AWS-CLI en Ubuntu

    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