Caricamento di un parametro da un file nella AWS CLI - AWS Command Line Interface

Caricamento di un parametro da un file nella AWS CLI

Alcuni parametri si aspettano nomi di file come argomenti, grazie ai quali l'AWS CLI carica i dati. Altri parametri consentono di specificare il valore del parametro come testo digitato sulla riga di comando o letto da un file. Se un file è obbligatorio o facoltativo, è necessario codificare correttamente il file in modo che l'AWS CLI possa comprenderlo. La codifica del file deve corrispondere alle impostazioni locali predefinite del sistema di lettura. È possibile determinarle usando il metodo Python locale.getpreferredencoding().

Questo metodo serve per caricare un file per un singolo parametro. Per informazioni sul caricamento di più parametri con un singolo file, consultaSkeleton e file di input della AWS CLI nella AWS CLI.

Nota

Per impostazione predefinita, Windows PowerShell restituisce il testo in formato UTF-16, che è in conflitto con la codifica UTF-8 utilizzata dai file JSON e da molti sistemi Linux. Ti consigliamo di utilizzare -Encoding ascii con i comandi PowerShell Out-File per essere sicuro che il file risultante possa essere letto dall'AWS CLI.

Come caricare un parametro da un file

In alcuni casi, ad esempio quando il parametro è una stringa JSON complessa, è utile caricare il valore di un parametro da un file anziché provare a digitarlo come valore di parametro della riga di comando. Per specificare un file che contiene il valore, specifica un URL di file nel formato seguente:

file://complete/path/to/file
  • I primi due caratteri di barra" /" fanno parte della specifica. Se il percorso richiesto inizia con "/", il risultato conterrà tre caratteri di barra: file:///folder/file.

  • L'URL fornisce il percorso del file con il contenuto del parametro effettivo.

  • Quando utilizzi dei file con spazi o caratteri speciali, segui le regole di escape e di utilizzo delle virgolette del tuo terminale.

I percorsi di file specificati nei seguenti esempi vengono interpretati come relativi alla directory di lavoro corrente.

Linux or macOS
// Read from a file in the current directory $ aws ec2 describe-instances --filters file://filter.json // Read from a file in /tmp $ aws ec2 describe-instances --filters file:///tmp/filter.json // Read from a file with a filename with whitespaces $ aws ec2 describe-instances --filters 'file://filter content.json'
Windows command prompt
// Read from a file in C:\temp C:\> aws ec2 describe-instances --filters file://C:\temp\filter.json // Read from a file with a filename with whitespaces C:\> aws ec2 describe-instances --filters "file://C:\temp\filter content.json"

L'opzione del prefisso file:// supporta le espansioni in stile Unix, tra cui "~/", "./" e "../". In Windows l'espressione "~/" si espande alla directory utente, archiviata nella variabile di ambiente %USERPROFILE%. Ad esempio, in Windows 10 in genere è presente una directory utente in %USERPROFILE%.

Nei documenti JSON incorporati come valore di un altro documento JSON deve essere comunque inserito il carattere di escape.

$ aws sqs create-queue --queue-name my-queue --attributes file://attributes.json

attributes.json

{ "RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-west-2:0123456789012:deadletter\", \"maxReceiveCount\":\"5\"}" }

File binari

Per i comandi che richiedono dati binari come parametro, è necessario specificare che i dati sono contenuto binario mediante il prefisso fileb://. I comandi che accettano i dati binari includono:

  • Parametro --user-data aws ec2 run-instances:.

  • Parametro --sse-customer-key aws s3api put-object:.

  • Parametro --ciphertext-blob aws kms decrypt:.

Nell’esempio seguente viene generata una chiave AES binaria da 256 bit mediante uno strumento a riga di comando Linux che vien poi fornita ad Amazon S3 per crittografare un file caricato sul lato server.

$ dd if=/dev/urandom bs=1 count=32 > sse.key 32+0 records in 32+0 records out 32 bytes (32 B) copied, 0.000164441 s, 195 kB/s $ aws s3api put-object \ --bucket amzn-s3-demo-bucket \ --key test.txt \ --body test.txt \ --sse-customer-key fileb://sse.key \ --sse-customer-algorithm AES256 { "SSECustomerKeyMD5": "iVg8oWa8sy714+FjtesrJg==", "SSECustomerAlgorithm": "AES256", "ETag": "\"a6118e84b76cf98bf04bbe14b6045c6c\"" }

Per un altro esempio che fa riferimento a un file contenente parametri in formato JSON più complessi, consulta Collegamento di una policy IAM gestita a un utente .

Caricamento di un file come valore di sintassi abbreviata

Quando si utilizza una sintassi abbreviata in cui un valore è grande o complesso, è spesso più semplice caricarlo in un file come valore. Per caricare un file come valore di sintassi abbreviata, la formattazione cambierà leggermente. Invece di key=value, utilizzerai l’operatore @= al posto dell’operatore =. @= significa per la AWS CLI che il valore deve essere letto come un percorso di file e non come una stringa. L’esempio seguente mostra una coppia chiave-valore che carica un file per il relativo valore.

Linux or macOS
--option key@=file://template.txt
Windows
--option "key1@=file://template.txt"

L’esempio seguente mostra il caricamento di un file di certificato per il comando aws rolesanywhere create-trust-anchor.

$ aws rolesanywhere create-trust-anchor --name TrustAnchor \ --source sourceData={x509CertificateData@=file://root-ca.crt},sourceType="CERTIFICATE_BUNDLE" \ --enabled

Per ulteriori informazioni sulla sintassi abbreviata, consulta Utilizzo della sintassi abbreviata in AWS CLI.