0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CLIを10倍速くする設定とエイリアス集【実務で使えるTips】

0
Posted at

AWS CLIを10倍速くする設定とエイリアス集【実務で使えるTips】

この記事でわかること

  • AWS CLIの出力形式を最適化して作業効率を上げる方法
  • 頻繁に使うコマンドをエイリアス化してタイプ数を減らすテクニック
  • プロファイル切り替えを素早く行うための設定
  • --query オプション(JMESPath)を使いこなして必要な情報だけ抽出する方法

実務での背景

AWSを日常的に使うエンジニアにとって、AWS CLIは最も触れる機会が多いツールのひとつです。しかしデフォルト設定のまま使い続けると、実は大量の無駄な操作が積み重なっています。

よくある非効率の例:

  • aws ec2 describe-instances を実行するたびに大量のJSONが流れてくる
  • 複数のAWSアカウントを切り替えるたびに --profile を手入力する
  • 同じコマンドを微妙に変えながら何度も打ち直す

これらは小さな非効率に見えますが、毎日何十回と繰り返すと積み重なって大きなロスになります。本記事では実務で使える最適化Tipsをまとめました。


解決方法

1. 出力形式の最適化

# デフォルトをtableに設定(視認性が上がる)
aws configure set output table

# 一時的にjsonで取得したいときだけ --output json を付ける
aws ec2 describe-instances --output json

2. --query でフィルタリング

JMESPathを使って必要なフィールドだけ取得します。

# インスタンスID・状態・Nameタグだけ取得
aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].[InstanceId,State.Name,Tags[?Key==`Name`].Value|[0]]' \
  --output table

3. プロファイル切り替えの効率化

export AWS_PROFILE を alias として定義しても awsp=prod の記法では動作しません。
シェル関数(function)として定義するのが正しい方法です。

# ~/.bashrc または ~/.zshrc に追加
awsp() { export AWS_PROFILE="$1"; echo "Profile: $AWS_PROFILE"; }
alias awswho='aws sts get-caller-identity --output table'

# 使い方
awsp prod     # AWS_PROFILEをprodに切り替え
awswho        # 現在の認証情報確認
awsp dev      # devに切り替え

具体的な手順

Step 1: ~/.aws/config の最適化

[default]
region = ap-northeast-1
output = table
cli_pager =

[profile dev]
region = ap-northeast-1
output = table
role_arn = arn:aws:iam::111111111111:role/DevRole
source_profile = default

[profile prod]
region = ap-northeast-1
output = json
role_arn = arn:aws:iam::222222222222:role/ProdRole
source_profile = default
mfa_serial = arn:aws:iam::000000000000:mfa/your-user

ポイント: cli_pager = を空にすると less が起動せず、コマンド結果がそのままターミナルに出力されます。スクリプト内での意図しない停止を防げます。

Step 2: 便利エイリアス・関数を ~/.bashrc に追加

# ---- プロファイル管理 ----
awsp() { export AWS_PROFILE="$1"; echo "Switched to: $AWS_PROFILE"; }
alias awswho='aws sts get-caller-identity --output table'
alias awsprofiles='grep "^\[profile" ~/.aws/config | sed "s/\[profile //;s/\]//"'

# ---- EC2 ----
alias ec2ls='aws ec2 describe-instances \
  --query "Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name,Tags[?Key==\`Name\`].Value|[0],PrivateIpAddress]" \
  --output table'

# ---- S3 ----
alias s3ls='aws s3 ls --human-readable'

# ---- CloudWatch Logs ----
alias cwlogs='aws logs describe-log-groups \
  --query "logGroups[*].[logGroupName,retentionInDays]" \
  --output table'

# ---- コスト確認(当月) ----
alias awscost='aws ce get-cost-and-usage \
  --time-period Start=$(date +%Y-%m-01),End=$(date +%Y-%m-%d) \
  --granularity MONTHLY \
  --metrics BlendedCost \
  --query "ResultsByTime[0].Total.BlendedCost.Amount" \
  --output text \
  --region us-east-1'

注意: aws ce(Cost Explorer)のAPIエンドポイントは us-east-1 固定です。--region us-east-1 を必ず付けてください。

Step 3: fzf と組み合わせてインタラクティブ選択

# fzfでEC2インスタンスを選択してSession Manager接続
ec2ssh() {
  local instance_id
  instance_id=$(aws ec2 describe-instances \
    --query 'Reservations[*].Instances[?State.Name==`running`].[InstanceId,Tags[?Key==`Name`].Value|[0]]' \
    --output text | fzf | awk '{print $1}')

  if [ -n "$instance_id" ]; then
    aws ssm start-session --target "$instance_id"
  fi
}

構成図

+------------------+
|   ~/.aws/config  |
|  - default       |
|  - profile: dev  |
|  - profile: prod |
+------------------+
         |
         v
+------------------+     +------------------+
|  ~/.bashrc       |     |  fzf (optional)  |
|  awsp() 関数     | --> |  インタラクティブ |
|  alias ec2ls=... |     |  インスタンス選択 |
+------------------+     +------------------+
         |
         v
+------------------+
|  AWS CLI v2      |
|  --query (JMESPath)
|  --output table  |
|  cli_pager=無効  |
+------------------+

ハマりポイント

alias awsp='export AWS_PROFILE' では正しく動作しない

alias awsp='export AWS_PROFILE' と定義すると、awsp prodexport AWS_PROFILE prod と展開されて 構文エラー になります。正しくは シェル関数 として定義します。

# NG: alias定義では引数を渡せない
alias awsp='export AWS_PROFILE'

# OK: 関数として定義する
awsp() { export AWS_PROFILE="$1"; }

cli_pager を設定し忘れる

デフォルトでは less が起動します。スクリプトの中で使うと less が起動して処理が止まることがあります。スクリプト内では必ず --no-cli-pager を付けましょう。

# スクリプト内での安全な書き方
aws ec2 describe-instances --no-cli-pager --output json

--query の引用符でシェルによって挙動が変わる

JMESPathのバッククォートはシェルによってエスケープが必要です。

# zshでは --query 内のバッククォートをエスケープが必要な場合がある
# シングルクォートで囲むのが最も安全
aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].Tags[?Key==`Name`].Value|[0]'

まとめ

設定項目 効果
output = table 視認性アップ、素早く確認できる
cli_pager = lessの自動起動を防止
--query JMESPath 必要な情報だけ抽出してノイズ削減
関数・エイリアス設定 タイプ量を大幅削減
fzf連携 インタラクティブな操作でミス防止

AWS CLIはデフォルト設定のまま使うには少し不親切ですが、自分用にカスタマイズするだけで作業効率が大幅に向上します。まずは cli_pager = の設定と awsp 関数の追加から始めてみましょう。

次回は、AWS CLIと組み合わせて使える Systems Manager Session Manager による踏み台サーバー不要の接続方法を解説します。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?