継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

GUI 頼りを卒業するための AWS CLI コマンド集

タダです.

みなさんは普段 AWS マネジメントコンソールをよく見ますか? GUI は直感的ですぐに状態確認もできて便利なのですが, GUI に頼っていると時間がない時や何度も見るページならすぐに確認できる術を知っておくと運用時にメリットが大きいはずです.

そこで, AWS CLI です.AWS CLI であればターミナルから AWS の情報を取得可能です.この記事では頻繁に使うコマンド,運用時に使って便利だと感じたコマンドを随時サービス別に整理して GUI に依存した対応を少なくしていくことを目的にしたいと考えています.

AWS CLI 共通のコマンド

コマンドのパラメーター例の生成

aws ec2 run-instances --generate-cli-skeleton

ただし,--generate-cli-skeleton--cli-input-json パラメータを使用できるものに限定されます.

docs.aws.amazon.com

EC2 のコマンド

AMI ID を取得する

# Linux
## Amazon Linux2
aws ssm get-parameters --names "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" --region ap-northeast-1 --query "Parameters[0].[Value]"
## Amazon Linux
aws ssm get-parameters --names "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2" --region ap-northeast-1 --query "Parameters[0].[Value]"

## Ubuntu
aws ec2 describe-images --owners 099720109477 --filters 'Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-????????' 'Name=state,Values=available' --output json | jq -r '.Images | sort_by(.CreationDate) | last(.[]).ImageId'

## REHL
aws ec2 describe-images --owners 309956199498 --filters 'Name=name,Values=RHEL-8*' 'Name=state,Values=available' --output json | jq -r '.Images | sort_by(.CreationDate) | last(.[]).ImageId'

## SUSE
aws ec2 describe-images --owners amazon --filters 'Name=name,Values=suse-sles-15-v????????-hvm-ssd-x86_64' 'Name=state,Values=available' --output json | jq -r '.Images | sort_by(.CreationDate) | last(.[]).ImageId'

# Windows
aws ssm get-parameters-by-path --path "/aws/service/ami-windows-latest" --region ap-northeast-1 --query 'Parameters[0].[Value]

Linux AMI の検索 docs.aws.amazon.com

Windows AMIの検索 docs.aws.amazon.com

EC2 インスタンスの状態確認

以下のコマンド例は,特定の Availability Zone の EC2 のステータスを確認するコマンドです.

aws ec2 describe-instance-status --filters Name=availability-zone,Values=<Availability Zone 名> Name=instance-status.status,Values=<状態>

EBSの状態確認

aws ec2 describe-volumes --filters Name=availability-zone,Values=<Availability Zone 名>

Availability Zone の状態確認

aws ec2 describe-availability-zones

リージョン全取得してソートする

aws ec2 describe-regions | jq -r '.Regions[] | .RegionName' | sort)

RDS に関するコマンド

RDS インスタンスの状態確認

aws rds describe-db-instances --query 'DBInstances[?AvailabilityZone==`<Availability Zone 名>`].{Name:DBInstanceIdentifier,Status:DBInstanceStatus}'

ELB に関するコマンド

1時間毎のUnHealthyHostCountの平均数を出すためのコマンド

aws cloudwatch get-metric-statistics --namespace AWS/ApplicationELB \
--metric-name UnHealthyHostCount --statistics Average  --period 3600 \
--dimensions Name=LoadBalancer,Value=app/xxxx/xxxxxxxxx \
--start-time YYYY-MM-DDTHH:MM:SSZ --end-time YYYY-MM-DDTHH:MM:SSZ 

特定日におけるリクエストの総数を1時間毎に収集する

aws cloudwatch get-metric-statistics --namespace AWS/ApplicationELB \
--metric-name RequestCount --statistics Sum --period 3600 \
--dimensions Name=LoadBalancer,Value=app/xxxx/xxxxxxxx \
--start-time YYYY-MM-DDTHH:MM:SSZ --end-time YYYY-MM-DDTHH:MM:SSZ \
--query "sort_by(Datapoints,&Timestamp)[?Sum>\`0\`][Sum,Timestamp]" --output text

特定日における 5XX系のエラー総数を1時間毎に収集する

aws cloudwatch get-metric-statistics --namespace AWS/ApplicationELB \
--metric-name HTTPCode_ELB_5XX_Count --statistics Sum --period 3600 \
--dimensions Name=LoadBalancer,Value=app/xxxx/xxxxxxxx \
--start-time YYYY-MM-DDTHH:MM:SSZ --end-time YYYY-MM-DDTHH:MM:SSZ \
--query "sort_by(Datapoints,&Timestamp)[?Sum>\`0\`][Sum,Timestamp]" --output text

CloudWatch に関するコマンド

メトリクス情報を取得する

aws cloudwatch list-metrics --namespace <名前空間>

STS に関するコマンド

エラーメッセージのデコード

aws sts decode-authorization-message --encoded-message <エラー文>

AWS アカウント ID の取得

# デフォルト
aws sts get-caller-identity | jq -r '.Account'

# --profile をつけると profile 定義したアカウント ID を取れる
aws sts get-caller-identity --profile <profile名> | jq -r '.Account'

AssumeRole を使う

aws sts assume-role --role-arn <AssumeRole の ARN> --role-session-name <AssumeRole のセッション名>

まとめ

運用時に使っているコマンドをまとめました.新たに追加するコマンドがあれば追加していきます.AWS CLI コマンドに寄せることでシェルと組み合わせて自動化や GUI で確認しづらい情報も確認しやすくなると思います.GUI 依存をできるだけなくして効率的な運用を検討していきましょう