11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

BeeXAdvent Calendar 2021

Day 5

awscliのよく使うコマンド

Posted at

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

以上。

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?