Évolutions – Migration de l'AWS CLI version 1 vers la version 2 - AWS Command Line Interface

Python 2.7, 3.4 et 3.5 est obsolète pour le AWS CLI version 1kit . Pour plus d'informations, consultez la AWS CLI version 1 section de À propos des AWS CLI versions.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Évolutions – Migration de l'AWS CLI version 1 vers la version 2

Cette rubrique décrit les changements de comportement entre l'AWS CLI version 1 et l'AWS CLI version 2 qui peuvent nécessiter une modification des scripts ou des commandes pour obtenir le même comportement dans la version 2 que dans la version 1.

AWS CLI version 2 utilise désormais une variable d'environnement pour définir l'encodage de fichier texte

Par défaut, les fichiers texte utilisent le même encodage que les paramètres régionaux installés. Pour définir un encodage de fichier texte différent de celui des paramètres régionaux, utilisez la variable d'environnement AWS_CLI_FILE_ENCODING. L'exemple ci-dessous définit l'interface de ligne de commande pour ouvrir des fichiers texte en UTF-8 sur Windows.

AWS_CLI_FILE_ENCODING=UTF-8

Pour plus d'informations, consultez Variables d'environnement pour configurer l’AWS CLI .

L'AWS CLI version 2 transmet désormais les paramètres binaires en tant que chaînes codées en base64 par défaut

Avec l'AWS CLI version 1, il n'était pas toujours facile de transmettre des paramètres binaires de la sortie d'une commande à l'entrée d'une autre commande sans passer par des traitements intermédiaires. Certaines commandes nécessitaient des chaînes codées en base64 alors que d'autres nécessitaient des chaînes d'octets codées en UTF8. L'AWS CLI version 2 assure une plus grande cohérence de la gestion des paramètres binaires afin de permettre une transmission plus fiable des valeurs d'une commande à une autre.

Par défaut, l'AWS CLI version 2 transmet désormais tous les paramètres d'entrée binaire et de sortie binaire en tant que chaînes codées en base64. Le type d'un paramètre qui nécessite une entrée binaire est spécifié comme objet blob dans la documentation. Pour transmettre des données binaires en tant que fichier à un paramètre de l'interface de ligne de commande, l'AWS CLI version 2 vous permet de spécifier le fichier à l'aide des préfixes suivants :

  • file:// – L'AWS CLI traite le contenu du fichier comme du texte codé en base64. Par exemple: --some-param file://~/my/path/file-with-base64.txt

  • fileb:// – L'AWS CLI traite le contenu du fichier comme des données binaires non encodées. Par exemple: --some-param fileb://~/my/path/file-with-raw-binary.bin

Vous pouvez indiquer à l'AWS CLI version 2 de revenir au comportement de l'AWS CLI version 1 en spécifiant la ligne suivante dans le fichier ~/.aws/config d'un profil.

cli_binary_format=raw-in-base64-out

Vous pouvez également rétablir le paramètre d'une commande individuelle, en remplaçant le paramètre de profil actif et en incluant le paramètre --cli-binary-format raw-in-base64-out sur la ligne de commande.

Si vous revenez au comportement de l'AWS CLI version 1 et spécifiez un fichier pour un paramètre binaire à l'aide de file:// ou de fileb://, l'AWS CLI traite le contenu du fichier en tant que données binaires brutes non codées.

AWS CLI version 2 améliore la gestion des propriétés de fichier et des balises Amazon S3 lors de l'exécution de copies en plusieurs parties

Lorsque vous utilisez la version de l'AWS CLI version 1 des commandes de l'espace de noms aws s3 pour copier un fichier d'un emplacement de compartiment Amazon S3 vers un autre emplacement de compartiment Amazon S3, et que cette opération utilise la copie en plusieurs parties, aucune propriété de fichier de l'objet source n'est copiée vers l'objet de destination.

Par défaut, les commandes AWS CLI version 2 de l'espace de noms s3 qui effectuent des copies partitionnées transfèrent désormais toutes les balises et l'ensemble de propriétés suivant de la source vers la copie de destination : content-type content-language, content-encoding, content-disposition, cache-control, expires et metadata.

Il peut en résulter des appels d'API AWS supplémentaires vers le point de terminaison Amazon S3 qui n'auraient pas été effectués si vous aviez utilisé l’AWS CLI version 1. Cela peut inclure : HeadObject , GetObjectTagging et PutObjectTagging.

Si vous devez modifier ce comportement par défaut dans les commandes de l'AWS CLI version 2, utilisez le paramètre --copy-props pour spécifier l'une des options suivantes :

  • default – La valeur par défaut. Spécifie que la copie inclut toutes les balises attachées à l'objet source et les propriétés englobées par le paramètre --metadata-directive utilisé pour les copies non partitionnées : content-type content-language, content-encoding, content-disposition, cache-control, expires et metadata.

  • metadata-directive – Spécifie que la copie inclut uniquement les propriétés englobées par le paramètre --metadata-directive utilisé pour les copies non partitionnées. Aucune balise n'est copiée.

  • none – Spécifie que la copie n'inclut aucune des propriétés de l'objet source.

AWS CLI version 2 ne récupère plus automatiquement http:// ou https:// URLs pour les paramètres

L'AWS CLI version 2 n'effectue plus d'opération GET lorsqu'une valeur de paramètre commence par http:// ou https:// puis utilise le contenu renvoyé comme valeur du paramètre. Si vous devez récupérer une URL et transmettre le contenu lu à partir de cette URL comme valeur d'un paramètre, nous vous recommandons d'utiliser curl ou un outil similaire pour télécharger le contenu de l'URL dans un fichier local. Ensuite, utilisez la syntaxe file:// pour lire le contenu de ce fichier et l'utiliser comme valeur du paramètre.

Par exemple, la commande suivante n'essaie plus de récupérer le contenu de la page se trouvant dans http://www.google.com et de le transmettre en tant que paramètre. Au lieu de cela, elle transmet la chaîne de texte littéral https://google.com en tant que paramètre.

$ aws ssm put-parameter --value http://www.google.com --name prod.microservice1.db.secret --type String 2

Si vous voulez vraiment récupérer et utiliser le contenu d'une URL web comme paramètre, vous pouvez effectuer les opérations suivantes dans la version 2 :

$ curl https://my.example.com/mypolicyfile.json -o mypolicyfile.json $ aws iam put-role-policy --policy-document file://./mypolicyfile.json --role-name MyRole --policy-name MyReadOnlyPolicy

Dans l'exemple précédent, le paramètre -o indique à curl qu'il doit enregistrer le fichier dans le dossier actif avec le même nom que le fichier source. La deuxième commande récupère le contenu de ce fichier téléchargé et le transmet en tant que valeur de --policy-document.

AWS CLI version 2 utilise un programme de pagination pour toutes les sorties par défaut.

Par défaut, AWS CLI version 2 renvoie toutes les sorties via le programme du pager par défaut de votre système d'exploitation. Par défaut, ce programme est le programme less sous Linux et macOS, et le programme more sous Windows. Cela peut faciliter votre navigation sur une grande quantité de sortie d'un service en affichant cette sortie une page à la fois. Cependant, vous voulez parfois toute la sortie sans avoir besoin d'appuyer sur une touche pour obtenir chaque page, par exemple lorsque vous exécutez des scripts. Pour ce faire, vous pouvez configurer l'AWS CLI version 2 afin qu'elle utilise un programme de pagination différent ou aucun programme. Pour ce faire, configurez la variable d'environnement AWS_PAGER ou le paramètre cli_pager dans votre fichier ~/.aws/config et spécifiez la commande que vous souhaitez utiliser. Vous pouvez spécifier une commande qui se trouve dans votre chemin de recherche ou spécifier le chemin d'accès complet et le nom de fichier de n'importe quelle commande disponible sur votre ordinateur.

Vous pouvez désactiver complètement toute utilisation d'un programme de pagination externe en définissant la variable sur une chaîne vide comme indiqué dans les exemples suivants.

En définissant une option dans le fichier~/.aws/config

L'exemple suivant montre comment le définir pour le profil default, mais vous pouvez l'ajouter à n'importe quel profil de votre fichier ~/.aws/config.

[default] cli_pager=

En définissant une variable d'environnement

Linux ou macOS :

$ export AWS_PAGER=""

Windows :

C:\> setx AWS_PAGER ""

L'AWS CLI version 2 renvoie désormais toutes les valeurs de sortie d'horodatage au format ISO 8601.

Par défaut, l'AWS CLI version 2 renvoie toutes les valeurs de réponse d'horodatage au format ISO 8601. Dans AWS CLI version 1, les commandes renvoyaient des valeurs d'horodatage dans n'importe quel format retourné par la réponse de l'API HTTP, qui pouvait varier d'un service à l'autre.

Les horodatages au format ISO 8601 ressemblent aux exemples suivants. Le premier exemple montre l'heure en temps universel coordonné (UTC) en incluant un Z après l'heure. La date et l'heure sont séparées par un T.

2019-10-31T22:21:41Z

Pour spécifier un fuseau horaire différent, au lieu de Z, spécifiez un + ou un - et le nombre d'heures que le fuseau horaire a en plus ou en moins par rapport à l'heure UTC, sous forme de valeur à deux chiffres. L'exemple suivant montre la même heure que l'exemple précédent, mais ajustée à l'heure standard du Pacifique, qui se traduit par huit heures de retard par rapport à l'heure UTC.

2019-10-31T14:21:41-08

Pour afficher les horodatages au format renvoyé par la réponse de l'API HTTP, ajoutez la ligne suivante à votre profil .aws/config.

cli_timestamp_format = wire

L'AWS CLI version 2 améliore la gestion des déploiements AWS CloudFormation qui n'entraînent aucun changement

Dans l'AWS CLI version 1, si vous avez déployé un modèle AWS CloudFormation qui n'a entraîné aucun changement, par défaut, l'AWS CLI échoue et affiche un code d'erreur. Un problème risque de survenir si vous ignorez cette erreur et souhaitez que votre script continue. Vous pouvez contourner ce problème dans l'AWS CLI version 1, en ajoutant l'indicateur -–no-fail-on-empty-changeset qui renvoie 0 et ne provoque pas d'erreur dans votre script.

Dans la mesure où il s'agit du scénario courant, l'AWS CLI version 2 renvoie par défaut le code de sortie réussie 0 lorsque le déploiement n'entraîne aucun changement et que l'opération renvoie un ensemble de modifications vide.

Dans l'AWS CLI version 2, pour revenir au comportement d'origine, vous devez ajouter le nouvel indicateur --fail-on-empty-changeset.

L'AWS CLI version 2 utilise les clés Amazon S3 de manière plus cohérente

Pour les commandes de personnalisation Amazon S3 dans l'espace de noms s3, nous avons amélioré la cohérence de l'affichage des chemins. Dans l'AWS CLI version 2, les chemins sont toujours affichés par rapport à la clé correspondante. L'AWS CLI version 1 montrait parfois les chemins sous forme absolue et parfois sous forme relative.

L'AWS CLI version 2 utilise le point de terminaison régional Amazon S3 correct pour la région us-east-1

Lors de la configuration de l'AWS CLI version 1 pour utiliser la région us-east-1, l'AWS CLI utilisait le point de terminaison s3.amazonaws.com global qui était physiquement hébergé dans la région us-east-1. L'AWS CLI version 2 utilise désormais le véritable point de terminaison régional s3.us-east-1.amazonaws.com lorsque cette région est spécifiée. Pour forcer l'AWS CLI version 2 à utiliser le point de terminaison global, vous pouvez définir la région afin d'effectuer une commande sur aws-global.

L'AWS CLI version 2 utilise les points de terminaison AWS STS régionaux par défaut

Par défaut, l'AWS CLI version 2 envoie toutes les demandes d'API AWS STS au point de terminaison régional pour la région AWS en cours de configuration.

Par défaut, l'AWS CLI version 1 envoie les demandes AWS STS au point de terminaison AWS STS global. Vous pouvez contrôler ce comportement par défaut dans la version V1 en utilisant le paramètre sts_regional_endpoints.

AWS CLI version 2 remplace ecr get-login par ecr get-login-password

L'AWS CLI version 2 remplace la commande aws ecr get-login par la nouvelle commande aws ecr get-login-password qui améliore l'intégration automatisée avec l'authentification du conteneur.

La commande aws ecr get-login-password réduit le risque d'exposer vos informations d'identification dans la liste des processus, l'historique du shell ou d'autres fichiers journaux. Il améliore également la compatibilité avec la commande docker login, permettant une meilleure automatisation.

La commande aws ecr get-login-password est disponible dans les versions AWS CLI version 1.17.10 et ultérieures, et dans l’AWS CLI version 2. L'ancienne commande aws ecr get-login est toujours disponible dans l'AWS CLI version 1 pour la compatibilité descendante.

La commande aws ecr get-login-password permet de remplacer le code suivant qui récupère un mot de passe.

$(aws ecr get-login -no-include-email)

Pour réduire le risque d'exposer le mot de passe à l'historique ou aux journaux du shell, utilisez plutôt l'exemple de commande suivant. Dans cet exemple, le mot de passe est transféré directement à la commande docker login, où il est affecté au paramètre password par l'option --password-stdin.

aws ecr get-login-password | docker login --username AWS --password-stdin MY-REGISTRY-URL

La prise en charge de l'AWS CLI version 2 pour les plug-ins est en train de changer

La prise en charge du plug-in dans l'AWS CLI version 2 est complètement provisoire et destinée à aider les utilisateurs à migrer à partir de l'AWS CLI version 1 jusqu'à ce qu'une interface stable et mise à jour du plug-in soit publiée. Il n'y a aucune garantie qu'un plug-in particulier ou même l'interface du plug-in de l'interface de ligne de commande sera pris en charge dans les futures versions de l'AWS CLI version 2. Si vous comptez sur des plug-ins, assurez-vous de verrouiller une version particulière de l'interface de ligne de commande et de tester la fonctionnalité de votre plug-in lorsque vous effectuez la mise à niveau.

Pour activer la prise en charge du plug-in, créez une section [plugins] dans votre ~/.aws/config.

[plugins] cli_legacy_plugin_path = <path-to-plugins>/python3.7/site-packages <plugin-name> = <plugin-module>

Dans la section [plugins], commencez par définir la variable cli_legacy_plugin_path et définissez sa valeur sur le chemin des packages du site Python dans lequel réside votre module de plug-in. Ensuite, vous pouvez configurer un plug-in en fournissant un nom pour le plug-in (plugin-name), et le nom de fichier du module Python, (plugin-module), qui contient le code source de votre plug-in. L'interface de ligne de commande charge chaque plug-in en important son plugin-module et en appelant sa fonction awscli_initialize.

L'AWS CLI version 2 ne prend plus en charge les alias « masqués »

L'AWS CLI version 2 ne prend plus en charge les alias masqués suivants, qui étaient pris en charge dans la version 1.

Dans le tableau suivant, la première colonne affiche le service, la commande et le paramètre qui fonctionnent dans toutes les versions, y compris l'AWS CLI version 2. La deuxième colonne affiche l'alias qui ne fonctionne plus dans l'AWS CLI version 2

Service, commande et paramètre fonctionnels Alias obsolète
cognito-identity create-identity-pool open-id-connect-provider-arns open-id-connect-provider-ar-ns
storagegateway describe-tapes tape-arns tape-ar-ns
storagegateway.describe-tape-archives.tape-arns tape-ar-ns
storagegateway.describe-vtl-devices.vtl-device-arns vtl-device-ar-ns
storagegateway.describe-cached-iscsi-volumes.volume-arns volume-ar-ns
storagegateway.describe-stored-iscsi-volumes.volume-arns volume-ar-ns
route53domains.view-billing.start-time début
deploy.create-deployment-group.ec2-tag-set ec-2-tag-set
deploy.list-application-revisions.s3-bucket s-3-bucket
deploy.list-application-revisions.s3-key-prefix s-3-key-prefix
deploy.update-deployment-group.ec2-tag-set ec-2-tag-set
iam.enable-mfa-device.authentication-code1 authentication-code-1
iam.enable-mfa-device.authentication-code2 authentication-code-2
iam.resync-mfa-device.authentication-code1 authentication-code-1
iam.resync-mfa-device.authentication-code2 authentication-code-2
importexport.get-shipping-label.street1 street-1
importexport.get-shipping-label.street2 street-2
importexport.get-shipping-label.street3 street-3
lambda.publish-version.code-sha256 code-sha-256
lightsail.import-key-pair.public-key-base64 public-key-base-64
opsworks.register-volume.ec2-volume-id ec-2-volume-id