Blog
AWS CLI-Aliase: Kürzen Sie Ihre meistgenutzten Befehle

Eines der bestgehüteten Geheimnisse der AWS CLI dürfte die Funktion "Alias" sein. Es handelt sich um eine native Funktion von AWS. In diesem Blog-Beitrag beschreibe ich, wie Sie loslegen können, und zeige Ihnen ein paar meiner bisher am häufigsten verwendeten Aliase.
cat > ~/.aws/cli/alias <<!
[toplevel]
whoami = sts get-caller-identity
cf = cloudformation
cfls =
!f() {
aws cloudformation list-stacks
}; f
!
Probieren Sie nun Ihre neuen Aliasnamen aus. Der erste ist der Alias für aws sts get-caller-identity.
$ aws whoami
{
"UserId": "A3H342JJLKJ24H23KL42:session",
"Account": "112233445566",
"Arn": "arn:aws:sts::985363061363:assumed-role/admin/session"
}
Als nächstes folgen die beiden Aliase für aws cloudformation list-stacks. Beide Beispiele sparen nur ein paar Tastenanschläge, aber es ist ein guter Anfang.
$ aws cf list-stacks
{
"StackSummaries": [
{
"StackId": "arn:aws:cloudformation:eu-west-1:112233445566:stack/stack/129...",
"StackName": "stack",
"CreationTime": "2019-06-26T14:38:32.984Z",
...
$ aws cfls
{
"StackSummaries": [
{
"StackId": "arn:aws:cloudformation:eu-west-1:112233445566:stack/stack/129...",
"StackName": "stack",
"CreationTime": "2019-06-26T14:38:32.984Z",
...
Jetzt haben Sie ein grundlegendes Verständnis für die Verwendung von Aliasen für einzelne Wörter und kurze Befehle, aber es gibt noch viel mehr zu lernen.
Die meisten CLI-Befehle, die ich verwende, sind mit CloudFormation. S3 CLI-Befehle wie aws s3 ls <bucket> sind ein Alias für aws s3api list-objects --bucket <bucket>. Diese Befehle sind standardmäßig in der AWS CLI verfügbar. Ich habe einige Aliase für CloudFormation auf ähnliche Weise erstellt. Die erste Reihe von Beispielen sind lediglich Informationsabfragen, die Sie häufig ausführen werden, um aktuelle Informationen oder den Status Ihrer Stacks zu erhalten.
*
*
*
*
*
Fügen Sie den folgenden Code zu Ihrem ~/.aws/cli/alias hinzu.
list =
!f() {
aws cloudformation list-stacks
--query "StackSummaries[?StackStatus != 'DELETE_COMPLETE' && starts_with(StackName, '${1}')].{StackName: StackName, StackStatus: StackStatus, UpdateTime: LastUpdatedTime}"
--output table
}; f
describe =
!f() {
if [ -z "$1" ]; then
echo "usage: aws describe <stack_name>"
else
aws cloudformation describe-stacks --stack-name $1
fi
}; f
outputs =
!f() {
if [ -z "$1" ]; then
echo "usage: aws outputs <stack_name>"
else
aws cloudformation describe-stacks
--stack-name $1
--query "Stacks[].Outputs[].{OutputKey: OutputKey, OutputValue: OutputValue}"
--output table
fi
}; f
resources =
!f() {
if [ -z "$1" ]; then
echo "usage: aws resources <stack_name>"
else
aws cloudformation describe-stack-resources
--stack-name $1
--query "StackResources[].{ResourceStatus: ResourceStatus, LogicalResourceId: LogicalResourceId, PhysicalResourceId: PhysicalResourceId}"
--output table
fi
}; f
events =
!f() {
if [ -z "$1" ]; then
echo "usage: aws events <stack_name>"
else
aws cloudformation describe-stack-events
--stack-name $1
--query "StackEvents[].[Timestamp,ResourceStatus,LogicalResourceId,ResourceStatusReason]"
--output table
fi
}; f
errors =
!f() {
if [ -z "$1" ]; then
echo "usage: aws errors <stack_name>"
else
aws cloudformation describe-stack-events
--stack-name $1
--query "StackEvents[?ResourceStatus=='CREATE_FAILED' || ResourceStatus=='UPDATE_FAILED'].[Timestamp,ResourceStatus,LogicalResourceId,ResourceStatusReason]"
--output table
fi
}; f
Außerdem gibt es einige Befehle zum schnellen Erstellen, Aktualisieren und Löschen von Stacks.
* Deploy. Setzt einen Stack ein und sucht standardmäßig nach der template.yml, da ich diese oft verwende. Außerdem ist der Parameter -capabilities bereits eingestellt.
* Paketieren. Dieser Befehl kann eine SAM-Vorlage verpacken und erzeugt eine neue Vorlagendatei für die Bereitstellung: packaged.yml (die natürlich überschrieben werden kann). Ziehen Sie die Verwendung des Befehls Launch in Betracht, da dieser ein Paket und eine Bereitstellung in einem Schritt durchführt.
* Launch. Erstellt ein Paket, indem es in ein S3bucket hochgeladen wird. Auch hier wird standardmäßig template.yml verwendet.
*
Fügen Sie nun den folgenden Codeschnipsel zu Ihrem ~/.aws/cli/alias hinzu.
package =
!f() {
if [ -z "$2" ]; then
template="template.yml"
else
template=$2
fi
if [ -z "$3" ]; then
packaged="packaged.yml"
else
packaged=$3
fi
if [ -z "$1" ]; then
echo "usage: aws package <s3bucket> [<source_template>] [<target_template>]"
else
aws cloudformation package
--template $template
--s3-bucket $1
--output-template-file $packaged
fi
}; f
deploy =
!f() {
if [ -z "$2" ]; then
template="template.yml"
else
template=$2
fi
if [ -z "$1" ]; then
echo "usage: aws package <stack_name> [<template>]"
else
aws cloudformation deploy
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
--stack-name $1
--template $template
fi
}; f
delete =
!f() {
if [ -z "$1" ]; then
echo "usage: aws delete <stack_name>"
else
aws cloudformation delete-stack
--stack-name $1
fi
}; f
launch =
!f() {
if [ -z "$3" ]; then
template="template.yml"
else
template=$3
fi
if [ "$template" == "packaged.yml" ]; then
echo "template should not be packaged.yml"
exit 1
fi
if [ -z "$1" ]; then
echo "usage: aws delete <s3bucket> <stack_name> [<template>]"
else
aws cloudformation package
--template $template
--s3-bucket $1
--output-template-file packaged.yml
aws cloudformation deploy
--stack-name $2
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
--template packaged.yml
fi
}; f
Fazit
Zum Abschluss dieses Blogbeitrags möchte ich Ihnen die Einrichtung des folgenden Stacks zeigen. Sie wird zunächst fehlschlagen, weil der BucketName bereits existiert. Dann lösche ich den Stack und entferne den BucketName, so dass CloudFormation einen neuen erstellt, den ich mit Ausgaben finden werde. In diesem Beispiel verwende ich eine Reihe von Alias-Befehlen, wie z.B.: deploy, errors, delete, outputs, resources. Ich denke, das wird Hunderte von Tastenanschlägen sparen.
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: "aws"
Outputs:
S3Bucket:
Value: !Ref S3Bucket
$ aws deploy test
Waiting for changeset to be created..
Waiting for stack create/update to complete
Failed to create/update the stack.
$ aws errors test
---------------------------------------------------------------------------------
| DescribeStackEvents |
+---------------------------+----------------+-----------+----------------------+
| 2019-07-01T13:22:01.076Z | CREATE_FAILED | S3Bucket | aws already exists |
+---------------------------+----------------+-----------+----------------------+
$ aws delete test
$ aws deploy test
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - test
$ aws resources test
-------------------------------------------------------------------------
| DescribeStackResources |
+-------------------+-------------------------------+-------------------+
| LogicalResourceId | PhysicalResourceId | ResourceStatus |
+-------------------+-------------------------------+-------------------+
| S3Bucket | test-s3bucket-1jsdfaabenntt | CREATE_COMPLETE |
+-------------------+-------------------------------+-------------------+
$ aws outputs test
----------------------------------------------
| DescribeStacks |
+------------+-------------------------------+
| OutputKey | OutputValue |
+------------+-------------------------------+
| S3Bucket | test-s3bucket-1jsdfaabenntt |
+------------+-------------------------------+
Ich hoffe, Sie nutzen diese Alias-Funktion und teilen Ihre Beispiele mit uns!
Verfasst von
Martijn van Dongen
Unsere Ideen
Weitere Blogs
Contact



