BioErrorLog Tech Blog

試行錯誤の記録

AWS CLIで利用可能な全サービス名を取得する

AWS CLIでAPIが提供されているAWSサービス名(サブコマンド名)を全て取得する方法の備忘録です。

はじめに

aws ec2aws s3のように、aws XXXのXXX部分に当たるサービス名の全量を列挙したいケースがありました。

やり方をまとめます。

# AWS CLIバージョン
$ aws --version
aws-cli/2.11.2 Python/3.11.2 Darwin/23.6.0 exe/x86_64 prompt/off

The English translation of this post is here.

AWS CLIで利用可能な全サービス名を取得する

やり方

下記コマンドでAWS CLIで利用可能な全サービス名を取得可能です。

# サービス名一覧を取得する場合
aws help | col -bx | sed -n '/AVAILABLE SERVICES/,/SEE ALSO/p' | grep 'o ' | awk '{print $2}'

# サービス名一覧をJSON配列で取得する場合
aws help | col -bx | sed -n '/AVAILABLE SERVICES/,/SEE ALSO/p' | grep 'o ' | awk '{print $2}' | jq -R . | jq -s .

パイプ|で繋がっているそれぞれの処理内容:

  • aws help
    AWS CLIのhelpページには、利用可能なサービスの一覧が記載されています。 ここからサービス一覧の抽出を行っていきます。
  • col -bx
    これはAWS CLIのhelpページから制御文字(backspace)を取り除いた上で、タブをスペースに展開するコマンドです。 backspaceが入り込んだままだと、helpページ内容をうまくテキスト処理できません。 詳細は別記事にまとめたので、こちらをご覧ください: AWS CLIのhelp結果がgrepできない問題の対処法 - BioErrorLog Tech Blog
  • sed -n '/AVAILABLE SERVICES/,/SEE ALSO/p'
    sedでAVAILABLE SERVICESからSEE ALSOまでの範囲だけを抜き出します。 ここにサービス一覧が記載されています。
  • grep 'o '
    抽出したブロックから、文字o の後に半角スペースがある行('o ' を含む行)だけを拾います。 AWS CLIヘルプページのサービス一覧は、o acm-pcaのように'o 'を箇条書きマーカーとして使っているためです。
  • awk '{print $2}'
    各行を空白区切りでフィールド分割し、2番目のフィールドだけを出力します。 先述の通り各行はo <サービス名>なので、$1 がo、$2 がサービス名です。
  • jq -R .
    -R--raw-inputです。 これによって、各行を生の文字列として受け取り、JSONの文字列にそのまま変換します(フィルタ.は「そのまま出す」の意味)。
  • jq -s .
    -s(--slurp)は、すべての入力行をまとめて配列にするオプションです。 これによって、文字列がJSON配列で出力できます。

実行例

ではまず、一つ目のコマンドでサービス名一覧を取得します。

$ aws help | col -bx | sed -n '/AVAILABLE SERVICES/,/SEE ALSO/p' | grep 'o ' | awk '{print $2}'
accessanalyzer
account
acm
acm-pca
alexaforbusiness
amp
amplify

# ~中略~

workdocs
worklink
workmail
workmailmessageflow
workspaces
workspaces-web
xray

サービス名一覧が文字列で取得できました。

次に、二つ目のコマンドでサービス名一覧をJSON配列で取得します。

$ aws help | col -bx | sed -n '/AVAILABLE SERVICES/,/SEE ALSO/p' | grep 'o ' | awk '{print $2}' | jq -R . | jq -s .
[
  "accessanalyzer",
  "account",
  "acm",
  "acm-pca",
  "alexaforbusiness",
  "amp",
  "amplify",

# ~中略

  "worklink",
  "workmail",
  "workmailmessageflow",
  "workspaces",
  "workspaces-web",
  "xray"
]

このように、サービス名一覧がJSON配列で取得できたことがわかります。

おわりに

以上、AWS CLIで利用可能な全サービス名をコマンドで取得する方法をまとめました。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

参考