AWS CLI 辞典

AWS CLI コースで覚えるサービスとオプションの一覧です。ファイルの操作・シェルの構文・curl は最初から使えます。

awsAWS を操作するLv1 で覚える

aws <サービス> <操作> [--パラメータ 値 ...]
aws --version
aws help / aws ec2 help

AWS CLI v2。Amazon Linux 2023 には最初から入っています。サービス(ec2・s3・iam…)と操作(describe-instances など)を並べて使います。終了コードは 0 成功、252 書き方の誤り、253 設定・認証、254 AWS からのエラー。

$ aws --version

aws sts誰として操作しているかLv1 で覚える

aws sts get-caller-identity

今の認証情報が、どのアカウントのどのユーザー(ロール)かを表示します。権限が無くても必ず使えるので、設定の確認に最初に打つコマンドです。

$ aws sts get-caller-identity

aws configure認証情報と既定値を設定Lv2 で覚える

aws configure(4 つの質問に答える)
aws configure --profile 名前
aws configure set region ap-northeast-1
aws configure get region / list / list-profiles

アクセスキー・シークレットキー・リージョン・出力形式を ~/.aws/credentials と ~/.aws/config に書きます。Enter だけ押すと今の値のまま。

$ aws configure
$ aws configure list

--regionリージョンを選ぶLv3 で覚える

--region ap-northeast-1
export AWS_REGION=us-east-1
aws configure set region …

EC2 や CloudWatch Logs のリソースはリージョンごとに別々です。--region、環境変数 AWS_REGION / AWS_DEFAULT_REGION、設定ファイルの順で決まります。IAM はリージョンに関係しません。

$ aws ec2 describe-availability-zones --region us-east-1

aws ec2EC2 と VPC を操作するLv3 で覚える

aws ec2 describe-instances / run-instances / stop-instances / start-instances / terminate-instances
aws ec2 wait instance-running --instance-ids ID
aws ec2 create-vpc / create-subnet / create-security-group …

インスタンス・AMI・キーペア・セキュリティグループ・VPC・サブネット・インターネットゲートウェイ・経路表を扱います。--dry-run で権限だけ確かめられます。

$ aws ec2 describe-instances --output table

--output出力の形を選ぶLv4 で覚える

--output json(既定)| text | table | yaml

json は機械向け、text はタブ区切りでシェルと相性がよく、table は人が読みやすい表です。aws configure set output text で既定を変えられます。

$ aws ec2 describe-vpcs --output table

--profile複数の認証情報を使い分けるLv5 で覚える

aws configure --profile dev
aws s3 ls --profile dev
export AWS_PROFILE=dev

~/.aws/credentials の [dev]、~/.aws/config の [profile dev] が 1 つのプロファイルです。本番と開発のように、アカウントや権限ごとに分けて使います。

$ aws configure list-profiles

aws s3S3 をファイルのように扱うLv7 で覚える

aws s3 ls [s3://バケット/接頭辞]
aws s3 mb / rb s3://バケット
aws s3 cp 元 先 [--recursive]
aws s3 sync 元 先 [--delete] [--exclude パターン]
aws s3 mv / rm
aws s3 presign s3://バケット/キー --expires-in 秒

高レベルのコマンド。ローカルのパスと s3://バケット/キー の間でコピーします。フォルダのように見える部分(PRE)は、キーの / までの接頭辞です。

$ aws s3 cp index.html s3://my-site/
$ aws s3 sync ./site s3://my-site --delete

aws s3apiS3 の API をそのまま呼ぶLv11 で覚える

aws s3api create-bucket --bucket 名前 --create-bucket-configuration LocationConstraint=リージョン
aws s3api list-objects-v2 --bucket 名前 [--prefix p]
aws s3api put-bucket-versioning / put-public-access-block / put-bucket-policy

バケットの設定(バージョニング・公開・ポリシー・タグ)など、aws s3 ではできない操作をします。出力は JSON です。

$ aws s3api get-bucket-versioning --bucket my-site

--query出力から必要なところだけ取り出すLv15 で覚える

--query 'Reservations[].Instances[].InstanceId'
--query 'Vpcs[0].VpcId' --output text
--query "Reservations[].Instances[?State.Name=='running'].InstanceId"
--query 'Reservations[].Instances[].{ID:InstanceId,Type:InstanceType}'

JMESPath という書き方で JSON を絞り込みます。[] で配列を広げ、[0] で 1 つ目、[?条件] で絞り込み、{名前:式} で形を作ります。手元で絞るので、AWS から返ってくる量は変わりません。

$ aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId' --output text

--filtersAWS の側で絞り込むLv18 で覚える

--filters Name=instance-state-name,Values=running
--filters Name=tag:Name,Values=web*
--filters Name=A,Values=x Name=B,Values=y(AND)

EC2 の describe-* で使います。条件は AWS 側で判定されるので、大量のリソースでも速いです。Values を複数書くと「どれか」、Name を複数書くと「全部」の条件です。

$ aws ec2 describe-instances --filters Name=tag:Env,Values=dev

aws iamユーザーと権限を管理するLv34 で覚える

aws iam create-user / create-group / add-user-to-group
aws iam attach-user-policy --user-name 名前 --policy-arn ARN
aws iam create-policy --policy-name 名前 --policy-document file://p.json
aws iam create-role / create-instance-profile / add-role-to-instance-profile
aws iam create-access-key / update-access-key / delete-access-key

IAM はリージョンに関係なくアカウント全体で 1 つです。必要な権限だけを付ける(最小権限)のが基本です。

$ aws iam list-users --output table

aws logsCloudWatch Logs を読む・管理するLv38 で覚える

aws logs describe-log-groups
aws logs tail ロググループ --since 1h
aws logs filter-log-events --log-group-name 名前 --filter-pattern ERROR
aws logs put-retention-policy --log-group-name 名前 --retention-in-days 30

アプリやサーバーのログを集めておく場所です。ロググループの中にログストリームがあり、そこにイベント(1 行ずつのログ)が入ります。

$ aws logs tail /app/web --since 30m