Ejecución de las imágenes oficiales de Amazon ECR Public o Docker para la AWS CLI - AWS Command Line Interface

Ejecución de las imágenes oficiales de Amazon ECR Public o Docker para la AWS CLI

En este tema se describe cómo ejecutar, controlar la versión y configurar la AWS CLI versión 2 en Docker mediante la imagen oficial de Amazon Elastic Container Registry Public (Amazon ECR Public) o Docker Hub. Para obtener más información sobre cómo usar Docker, consulte la documentación de Docker.

Las imágenes oficiales proporcionan aislamiento, portabilidad y seguridad que AWS respalda y mantiene directamente. Esto le permite utilizar la versión 2 de la AWS CLI en un entorno basado en contenedores sin tener que administrar la instalación usted mismo.

Requisitos previos

Debe tener instalado Docker. Para obtener instrucciones de instalación, consulte el sitio web de Docker.

Para verificar la instalación de Docker, ejecute el siguiente comando y confirme que hay un resultado.

$ docker --version Docker version 19.03.1

Decisión entre Amazon ECR Public y Docker Hub

Recomendamos utilizar Amazon ECR Public en lugar de Docker Hub para las imágenes de la AWS CLI. Docker Hub tiene una limitación de velocidad más estricta para los consumidores públicos, lo que puede causar problemas de limitación. Además, Amazon ECR Public replica imágenes en más de una región para proporcionar una disponibilidad sólida y controlar los problemas de interrupción de las regiones.

Para obtener más información sobre la limitación de velocidad de Docker Hub consulte Understanding Docker Hub Rate Limiting (Descripción de la limitación de velocidad de Docker Hub) en el sitio web de Docker.

Ejecución de las imágenes oficiales de AWS CLI versión 2

La primera vez que utilice el comando docker run, se descargará la última imagen en su equipo. Cada uso posterior del comando docker run se ejecuta desde la copia local.

Para ejecutar las imágenes Docker de la AWS CLI versión 2, utilice el comando docker run.

Amazon ECR Public

La imagen de Amazon ECR Public oficial de la AWS CLI versión 2 está alojada en Amazon ECR Public en el repositorio de aws-cli/aws-cli.

$ docker run --rm -it public.ecr.aws/aws-cli/aws-cli command
Docker Hub

La imagen de Docker oficial de la AWS CLI versión 2 está alojada en Docker Hub en el repositorio de amazon/aws-cli.

$ docker run --rm -it amazon/aws-cli command

El comando funciona de la siguiente manera:

  • docker run --rm -it repository/name: el equivalente de la aws ejecutable. Cada vez que ejecuta este comando, Docker hace girar un contenedor de la imagen descargada y ejecuta el comando aws. De forma predeterminada, la imagen utiliza la versión más reciente de la AWS CLI versión 2.

    Por ejemplo, para llamar al comando aws --version en Docker, ejecute lo siguiente.

    Amazon ECR Public
    $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli --version aws-cli/2.17.20 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
    Docker Hub
    $ docker run --rm -it amazon/aws-cli --version aws-cli/2.17.20 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
  • --rm: especifica que se limpie el contenedor después de que el comando salga.

  • -it: especifica que se abra un pseudoTTY con stdin. Esto le permite proporcionar datos a la versión 2 de la AWS CLI mientras se está ejecutando en un contenedor, por ejemplo, mediante el uso de los comandos aws configure y aws help. Al elegir si se debe omitir -it, tenga en cuenta lo siguiente:

    • Si está ejecutando scripts, -it no es necesario.

    • Si experimenta errores con los scripts, omitir -it de la llamada Docker puede resolver el problema.

    • Si está intentando canalizar la salida, -it puede provocar errores y la omisión -it de la llamada Docker puede resolver este problema. Si desea conservar la marca -it, pero aún así quisiera canalizar la salida, desactivar la Paginación del lado del cliente que AWS CLI usa de forma predeterminada debería resolver el problema.

Para obtener más información sobre el comando docker run, consulte la guía de referencia de Docker.

Notas sobre interfaces y compatibilidad con versiones anteriores de las imágenes oficiales

  • La única herramienta admitida en la imagen es AWS CLI. Solo el ejecutable aws se debe ejecutar directamente. Por ejemplo, aunque less y groff están instalados explícitamente en la imagen, no se deben ejecutar directamente fuera de un comando AWS CLI.

  • El directorio de trabajo de /aws está controlado por el usuario. La imagen no se escribirá en este directorio, a menos que el usuario le indique que ejecute un comando de AWS CLI.

  • No hay garantías de compatibilidad con versiones anteriores para confiar en la última etiqueta. Para garantizar la compatibilidad con versiones anteriores, debe anclar una etiqueta <major.minor.patch> específica, ya que esas etiquetas son inmutables; solo se enviarán una vez.

Uso de versiones y etiquetas específicas

La imagen oficial de la AWS CLI versión 2 tiene varias versiones que puede usar, comenzando con la versión 2.0.6. Para ejecutar una versión específica de la versión 2 de la AWS CLI, agregue la etiqueta adecuada al comando docker run. La primera vez que utiliza el comando docker run con una etiqueta, la imagen más reciente para esa etiqueta se descarga en el equipo. Cada uso posterior del comando docker run con esa etiqueta se ejecuta desde la copia local.

Puede utilizar dos tipos de etiquetas:

  • latest: define la última versión de la de la AWS CLI versión 2 para la imagen. Le recomendamos que utilice la etiqueta latest cuando desee la versión más reciente de la versión 2 de la AWS CLI. Sin embargo, no hay garantías de compatibilidad con versiones anteriores al usar esta etiqueta. La etiqueta latest se utiliza de forma predeterminada en el comando docker run. Para utilizar explícitamente la etiqueta latest, agregue la etiqueta al nombre de la imagen del contenedor.

    Amazon ECR Public
    $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli:latest command
    Docker Hub
    $ docker run --rm -it amazon/aws-cli:latest command
  • <major.minor.patch>: define una versión específica de la AWS CLI versión 2 para la imagen Docker. Si piensa utilizar una imagen oficial en producción, le recomendamos que use una versión específica de la AWS CLI versión 2 para garantizar la compatibilidad con versiones anteriores. Por ejemplo, para ejecutar la versión 2.0.6, agregue la versión al nombre de la imagen del contenedor.

    Amazon ECR Public
    $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli:2.0.6 command
    Docker Hub
    $ docker run --rm -it amazon/aws-cli:2.0.6 command

Actualización a la imagen oficial más reciente

Dado que la imagen más reciente se descarga en el equipo solo la primera vez que utiliza el comando docker run, debe extraer manualmente una imagen actualizada. Para actualizar manualmente a la versión más reciente, le recomendamos que extraiga la imagen etiquetada latest. Al extraer la imagen, se descarga la versión más reciente en el equipo.

Amazon ECR Public
$ docker pull public.ecr.aws/aws-cli/aws-cli:latest
Docker Hub
$ docker pull amazon/aws-cli:latest

Comparta llos archivos anfitrión, credenciales, variables del entorno y configuración

Dado que la versión 2 de la AWS CLI se ejecuta en un contenedor, la CLI no puede acceder de forma predeterminada al sistema de archivos anfitrión, que incluye la configuración y las credenciales. Para compartir el sistema de archivos anfitrión, las credenciales y la configuración en el contenedor, monte el directorio ~/.aws del sistema host en el contenedor en /root/.aws con la etiqueta -v del comando docker run. Esto permite que la versión 2 de la AWS CLI, que se está ejecutando en el contenedor, localice la información del archivo anfitrión.

Amazon ECR Public

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command
Docker Hub

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli command

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws amazon/aws-cli command

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws amazon/aws-cli command

Para obtener más información acerca la etiqueta -v y el montaje, consulte la guía de referencia de Docker.

nota

Para obtener información sobre los archivos de config y credentials, consulte Opciones de los archivos de configuración y credenciales en la AWS CLI.

Ejemplo 1: proporcionar credenciales y configuración

En este ejemplo, proporcionamos las credenciales de anfitrión y la configuración al ejecutar el comando s3 ls para mostrar los buckets en Amazon Simple Storage Service (Amazon S3). Los siguientes ejemplos utilizan la ubicación predeterminada para los archivos de credenciales y de configuración de la AWS CLI, para utilizar una ubicación diferente, cambie la ruta del archivo.

Amazon ECR Public

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls
Docker Hub

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws amazon/aws-cli s3 ls

Puede llamar a variables de entorno específicas del sistema utilizando el marcador -e. Para utilizar una variable de entorno, llámelo por su nombre.

Amazon ECR Public

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls
Docker Hub

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls

Ejemplo 2: Descarga de un archivo Amazon S3 en el sistema de anfitrión

Para algunos comandos de la AWS CLI versión 2, puede leer archivos del sistema de host en el contenedor o escribir archivos desde el contenedor en el sistema de host.

En este ejemplo, descargamos el objeto S3 s3://aws-cli-docker-demo/hello a su sistema de archivos local montando el directorio de trabajo actual en el directorio /aws del contenedor. Al descargar el objeto hello en el directorio /aws del contenedor, el archivo también se guarda en el directorio de trabajo actual del sistema de host.

Amazon ECR Public

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
Docker Hub

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello .

Para confirmar que el archivo descargado existe en el sistema de archivos local, ejecute lo siguiente.

Linux y macOS

$ cat hello Hello from Docker!

Windows PowerShell

$ type hello Hello from Docker!

Ejemplo 3: uso de la variable de entorno AWS_PROFILE

Puede llamar a variables de entorno específicas del sistema utilizando el marcador -e. Llame a cada variable de entorno que desee utilizar. En este ejemplo, proporcionamos las credenciales de anfitrión, la configuración y la variable de entorno AWS_PROFILE cuando se ejecuta el comando s3 ls para mostrar los buckets en Amazon Simple Storage Service (Amazon S3).

Amazon ECR Public

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls
Docker Hub

Linux y macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Símbolo del sistema de Windows

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls

Acortamiento del comando docker run

Para acortar el comando docker run, le sugerimos que utilice la capacidad del sistema operativo para crear un symbolic link (enlace simbólico) o alias en Linux y macOS o doskey en Windows. Para establecer el alias de aws, puede ejecutar uno de los siguientes comandos:

  • Para obtener acceso básico a los comandos de aws, ejecute lo siguiente.

    Amazon ECR Public

    Linux y macOS

    $ alias aws='docker run --rm -it public.ecr.aws/aws-cli/aws-cli'

    Símbolo del sistema de Windows

    C:\> doskey aws=docker run --rm -it public.ecr.aws/aws-cli/aws-cli $*

    Windows PowerShell

    C:\> Function AWSCLI {docker run --rm -it public.ecr.aws/aws-cli/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
    Docker Hub

    Linux y macOS

    $ alias aws='docker run --rm -it amazon/aws-cli'

    Símbolo del sistema de Windows

    C:\> doskey aws=docker run --rm -it amazon/aws-cli $*

    Windows PowerShell

    C:\> Function AWSCLI {docker run --rm -it amazon/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
  • Para acceder al sistema de archivos anfitrión y a las opciones de configuración cuando se utilizan comandos de aws, ejecute lo siguiente.

    Amazon ECR Public

    Linux y macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli'

    Símbolo del sistema de Windows

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli $*

    Windows PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
    Docker Hub

    Linux y macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli'

    Símbolo del sistema de Windows

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli $*

    Windows PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
  • Para asignar una versión específica para usarla en su alias de aws, agregue la etiqueta de versión.

    Amazon ECR Public

    Linux y macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli:2.0.6'

    Símbolo del sistema de Windows

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli:2.0.6 $*

    Windows PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli:2.0.6 $args} Set-Alias -Name aws -Value AWSCLI
    Docker Hub

    Linux y macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli:2.0.6'

    Símbolo del sistema de Windows

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli:2.0.6 $*

    Windows PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli:2.0.6 $args} Set-Alias -Name aws -Value AWSCLI

Después de configurar el alias, puede ejecutar la AWS CLI versión 2 desde un contenedor como si estuviera instalado en su sistema host.

$ aws --version aws-cli/2.17.20 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10