AWSを触り始めて2年ぐらいになります。awscliは普段どんなコマンドを使っているのか、ふとコマンド実行履歴から振り返ってみました。
以下のコマンドで私の実行履歴を見て、目についたものを本記事にまとめました。
$ cat ~/.zsh_history | perl -nle '/^[^;]*;(.+)$/ and print $1' | perl -nle '/^aws --profile \S+ (.+)$/ and print $1 or /^aws (.+)$/ and print $1;' | LC_ALL=C sort | less
S3関連
awscliで一番多いのがS3関連でした。
S3のオブジェクト一覧
lsコマンドとよく使うオプションや、よく使う他のコマンドとの組み合わせ。
wcはオブジェクトの数を数えてます。grepはファイル名で検索しています。
$ aws s3 ls
$ aws s3 ls S3_BUCKET
$ aws s3 ls s3://S3_BUCKET/S3_PREFIX/
$ aws s3 ls --human s3://S3_BUCKET/S3_PREFIX/
$ aws s3 ls --recursive s3://S3_BUCKET/S3_PREFIX/
$ aws s3 ls --recursive s3://S3_BUCKET/S3_PREFIX/ | wc -l
$ aws s3 ls --recursive s3://S3_BUCKET/S3_PREFIX/ | grep PATTERN
バケットのバージョニング設定をしている場合で、過去バージョンも含めてオブジェクトの一覧を見たい場合。
$ aws s3api list-object-versions --bucket S3_BUCKET --prefix S3_KEY
$ aws s3api list-object-versions --bucket S3_BUCKET --prefix S3_PREFIX/
S3オブジェクト閲覧
lessコマンドで表示するコマンド。gzで圧縮されている場合はgunzip併用。JSONの場合はjqコマンド併用で見やすくします。
$ aws s3 cp s3://S3_BUCKET/S3_KEY -
$ aws s3 cp s3://S3_BUCKET/S3_KEY - | less
$ aws s3 cp s3://S3_BUCKET/S3_KEY.gz - | gunzip | less
$ aws s3 cp s3://S3_BUCKET/S3_KEY.json.gz - | gunzip | jq . -C | less -SRXF
ローカルにコピーしてからゆっくり見てもよいです。tarファイルはローカルに展開してから見たほうが楽。
$ aws s3 cp s3://S3_BUCKET/S3_KEY LOCAL_FILE
$ aws s3 cp --recursive s3://S3_BUCKET/S3_PREFIX/ LOCAL_DIR/
$ aws s3 cp s3://S3_BUCKET/S3_KEY.tar.gz - | tar xvzf -
S3オブジェクト作成
ローカルにあるファイルをS3にコピー。s3apiはあまり使わない。
$ aws s3 cp LOCAL_FILE s3://S3_BUCKET/S3_KEY
$ aws s3api put-object --bucket S3_BUCKET --key sample2/aaa/1 --body test.txt
/
で終わるキーのオブジェクトを作成するには、s3コマンドではなくs3apiコマンドが必要です。以下のコマンドはサイズ0のオブジェクトを作成しますが、フォルダがあるかのように見せかけるときによく使います。
$ aws s3api put-object --bucket S3_BUCKET --key S3_PREFIX/
既存のS3オブジェクトを編集する方法は、以前に記事に書きました。
S3オブジェクトコピー
バケット内でオブジェクトのコピー、バケットをまたいだコピー、異なるAWSアカウントなどでプロファイルをまたいだコピー。
$ aws s3 cp s3://S3_BUCKET/S3_KEY s3://S3_BUCKET/OTHER_S3_KEY
$ aws s3 cp s3://S3_BUCKET/S3_KEY s3://OTHER_S3_BUCKET/OTHER_S3_KEY
$ aws --profile PROFILE s3 cp s3://S3_BUCKET/S3_KEY - | aws --profile OTHER_PROFILE s3 cp - s3://OTHER_S3_BUCKET/OTHER_S3_KEY
フォルダまるごとコピー。
$ aws s3 cp --recursive s3://S3_BUCKET/S3_PREFIX/ s3://S3_BUCKET/OTHER_S3_PREFIX/
$ aws s3 cp --recursive s3://S3_BUCKET/S3_PREFIX/ s3://OTHER_S3_BUCKET/OTHER_S3_PREFIX/
S3オブジェクトのキーをリネーム
$ aws s3 mv s3://S3_BUCKET/S3_KEY s3://S3_BUCKET/OTHER_S3_KEY
$ aws s3 mv --recursive s3://S3_BUCKET/S3_PREFIX/ s3://S3_BUCKET/OTHER_S3_PREFIX/
S3オブジェクトを削除
$ aws s3 rm s3://S3_BUCKET/S3_KEY
$ aws s3 rm --recursive s3://S3_BUCKET/S3_PREFIX/
$ aws s3 rm --recursive --quiet s3://S3_BUCKET/S3_PREFIX/
S3バケットの各種設定
$ aws s3api list-bucket-analytics-configurations --bucket BUCKET_NAME
$ aws s3api get-bucket-analytics-configuration --bucket BUCKET_NAME --id CONFIGURATION_ID
$ aws s3api put-bucket-analytics-configuration --bucket BUCKET_NAME --id CONFIGURATION_ID --analytics-configuration JSON_STRING
$ aws s3api get-bucket-encryption --bucket BUCKET_NAME
$ aws s3api list-bucket-inventory-configurations --bucket BUCKET_NAME
$ aws s3api get-bucket-inventory-configuration --bucket BUCKET_NAME --id CONFIGURATION_ID
$ aws s3api put-bucket-inventory-configuration --bucket BUCKET_NAME --id CONFIGURATION_ID --inventory-configuration JSON_STRING
$ aws s3api get-bucket-lifecycle-configuration --bucket BUCKET_NAME
$ aws s3api get-bucket-logging --bucket BUCKET_NAME
$ aws s3api list-bucket-metrics-configurations --bucket BUCKET_NAME
$ aws s3api get-bucket-metrics-configuration --bucket BUCKET_NAME --id CONFIGURATION_ID
$ aws s3api put-bucket-metrics-configuration --bucket BUCKET_NAME --id CONFIGURATION_ID --metrics-configuration JSON_STRING
$ aws s3api get-bucket-policy --bucket S3_BUCKET | jq '.Policy' -r | jq . -C | less -SRXF
$ aws s3api get-bucket-versioning --bucket S3_BUCKET
CloudFormation
$ aws cloudformation package --template-file TEMPLATE_FILE --output-template-file OUTPUT_FILE
$ aws cloudformation deploy --template-file TEMPLATE_FILE --stack-name STACK_NAME
$ aws cloudformation describe-stacks --stack-name STACK_NAME | jq -r '.Stacks[0].Outputs[0].OutputValue'
$ aws cloudformation describe-stack-events --stack-name STACK_NAME
$ aws cloudformation delete-stack --stack-name STACK_NAME
デプロイ済みスタックのテンプレートを取得するにはget-templateコマンド。ただ、YAMLなのかJSONなのか、デプロイ時といま見たいのがどちらのフォーマットなのかで、どうしたらいいかは以前に記事に書きました。
$ aws cloudformation get-template --stack-name STACK_NAME
Lambda
一覧取得。
$ aws lambda list-functions
$ aws lambda list-functions | jq -C ".Functions[].FunctionName" -r
Lambdaの情報取得。2つ目のコマンドは、Lambdaのソースコード取得。
$ aws lambda get-function --function-name FUNCTION_NAME
$ aws s3 cp "$(aws lambda get-function --function-name FUNCTION_NAME | jq .Code.Location -r)" LOCAL_FILENAME.zip
Lambda実行。
$ aws lambda invoke --function-name FUNCTION_NAME /dev/null
$ aws lambda invoke --function-name FUNCTION_NAME /dev/stdout
CloudWatch Logs
ロググループ関係。
$ aws logs create-log-group --log-group-name LOG_GROUP_NAME
$ aws logs delete-log-group --log-group-name LOG_GROUP_NAME
$ aws logs describe-log-groups --log-group-name-prefix LOG_GROUP_NAME
$ aws logs put-retention-policy --log-group-name LOG_GROUP_NAME --retention-in-days NUMBER
ログ自体をCUIで見るときは私はawslogsコマンドを使っています。
IAM
IAM関係を見るコマンド。
$ aws iam get-user --user-name USER_NAME
$ aws iam list-attached-user-policies --user-name USER_NAME
$ aws iam get-user-policy --user-name USER_NAME --policy-name POLICY_NAME
$ aws iam list-roles
$ aws iam get-role --role-name ROLE_NAME
$ aws iam get-policy --policy-arn POLICY_ARN
IAMポリシーをawscliでいじる方法は、以前に記事に書きました。
次はインスタンスプロファイル関係。
$ aws iam list-instance-profiles
$ aws iam get-instance-profile --instance-profile-name INSTANCE_PROFILE_NAME
EC2
EC2を操作する機会は私は少ないです。こんなコマンド履歴は見つかりました。
$ aws ec2 describe-instances
$ aws ec2 describe-instances --instance_ids INSTANCE_ID
$ aws ec2 describe-network-interfaces
$ aws ec2 describe-network-interfaces | jq '.NetworkInterfaces[] | [.VpcId, .AvailabilityZone, .SubnetId, .PrivateIpAddress, .RequesterId, .Attachment.InstanceId] | @tsv'
$ aws ec2 describe-security-groups
$ aws ec2 describe-subnets
RDS
RDS関係。
$ aws rds describe-db-instances
$ aws rds describe-db-instances --db-instance-identifier INSTANCE_ID
$ aws rds describe-db-parameter-groups
$ aws rds describe-db-parameter-groups --db-parameter-group-name PARAMETER_GROUP_NAME
$ aws rds describe-db-parameters --db-parameter-group-name PARAMETER_GROUP_NAME
RDSのインスタンスにあるログを見る方法は以前に記事を書きました。
Redshift
RDSもRedshiftも、インスタンス自体をどうにかする場合はマネジメントコンソールで済ますことが多く、また中身のデータに対してクエリを投げたい場合はpsqlコマンドを使うことが多いです。従ってawscliでの実行履歴は少ないです。
$ aws redshift describe-clusters
$ aws redshift describe-clusters --cluster-identifier CLUSTER_IDENTIFIER
Glue
データカタログ。
$ aws glue get-tables --database-name DATABASE_NAME
$ aws glue get-tables --database-name DATABASE_NAME | jq '.TableList[].Name' -r
$ aws glue get-table --database-name DATABASE_NAME --name TABLE_NAME
クローラ。
$ aws glue get-crawler --name CRAWLER_NAME
$ aws glue get-crawler --name CRAWLER_NAME | jq '.Crawler.State' -r
$ aws glue get-crawler --name CRAWLER_NAME | jq '.Crawler.Targets.JdbcTargets[] | .Path' -r
$ aws glue get-crawlers
$ aws glue start-crawler --name CRAWLER_NAME
コネクション。
$ aws glue get-connection --name CONNECTION_NAME
ジョブ。
$ aws glue list-jobs --max-results 1000
$ aws glue list-jobs --max-results 1000 | jq '.JobNames[]' -r
$ aws glue get-jobs
$ aws glue get-jobs | jq -r ".Jobs[] | .Name"
$ aws glue get-job --job-name JOB_NAME
$ aws glue delete-job --job-name JOB_NAME
$ aws glue start-job-run --job-name JOB_NAME
Step Functions
Step Functionsの実行をawscliからキックしてました。
$ aws stepfunctions start-execution --state-machine-arn STATE_MACHINE_ARN
$ aws stepfunctions list-executions --state-machine-arn STATE_MACHINE_ARN
CodeCommit
レポジトリの一覧をawscliで見てました。
$ aws codecommit list-repositories
その他
アクセスキーの設定とかAWSアカウントを確認できるコマンド。
$ aws configure list
$ aws sts get-caller-identity
以上。