ブログ

AWS運用に便利な CLI ─ コンソールだけでは物足りないアナタに

AWSサービスの種類・機能が増加するにつれ、AWSコンソール (GUI) で操作出来ることが多くなり、今ではほとんどのことが出来るようになりました。ですがそれでも「 AWS CLI (CUI) でないと対応できない」「 AWS CLI のほうが便利」という場面があります。

今回は、私が AWS CLI をどのように利用しているかについて紹介していきたいと思います。

AWS CLI とは

AWS コマンドラインインターフェース (CLI) とはコマンドラインシェル(コマンドプロンプト、PowerShell、Linuxシェル等)からコマンドを使用して、AWSサービスとやり取りすることが出来るオープンソースツールです。

◎ AWS CLI のバージョン

AWS CLI には AWS CLI v2 と v1 があり、v2 が主流となっています。( v1 は下位互換のために使用できる以前のバージョンです)

現在のメジャーバージョンは上記2種類ですが、コマンドの構文自体は大きく変わりません。

◎ AWS CLI を使ううえでの前提

AWS CLI を使ってAWSサービスとやり取りする上で、おおまかですが2つ前提があります。

※細かい前提については割愛いたします。

  • 実行環境に AWS CLI がインストールされている
     → 各OS用のインストーラーがAWSから用意されています
  • 認証情報(IAMユーザ・ロール)を所持及び設定している
     → 設定方法は後述

◎ 認証情報の設定

ここでは3つご紹介しますが、最も簡単で汎用的な設定方法は ```aws configure``` コマンドでの設定かと思います。

[その1] aws configure コマンドで設定

例)

$ sudo -s
[root@ip-172-31-20-80 ec2-user]# aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxx
Default region name [ap-northeast-1]: ap-northeast-1
Default output format [json]: json

IAMユーザを使用する場合は、この方法で設定できます。
Amazon EC2 ではなく、 Windows や Mac 等のPCでも設定でき利用しやすいです。

[その2] IAMロールで設定

AWSサービス( EC2 等)から AWS CLI を利用する場合は、IAMロールでの設定が良いかと思います。

EC2 の場合、AWSコンソールの EC2 画面からIAMロールを変更することで設定可能です。

この場合、 ```aws configure``` での認証情報(アクセスキー、シークレットアクセスキー)の設定は不要です。

端末に認証情報を残さないという点ではセキュリティ面で有利な方法と言えます。

[その3] 名前付きプロファイルを使用

最後に名前付きプロファイルを使用する方法があります。

LinuxとMacでは「 ~/.aws/credentials 」に、
Windowsでは「 %USERPROFILE%\.aws\credentials 」に以下のようなファイルを作成します。

例)

[default]
aws_access_key_id=xxxxxxxxxxxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxx

[user1]
aws_access_key_id=xxxxxxxxxxxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxx

上記ファイル作成後、コマンドでどのプロファイルを使用するか指定することで、その認証情報を使用して実行することが出来ます。

例)

$ aws ec2 describe-instances --profile user1

AWS運用に欠かせない コンソールで対応できない時の AWS CLI 

冒頭でも触れましたが、AWSコンソールでほとんどの事に対応可能です。
ですが実装されていない機能もあるので、どうしても AWS CLI 等、別の方法で対応しなければならない事があります。

最近、私が CLI を使った作業はのは EC2 にアタッチされている EBS の “DeleteOnTermination” の変更です。

AWSコンソールでは上記赤枠で “DeleteOnTermination” の状態が確認できます。確認自体は出来ますが、変更できる画面が無く AWS CLI 等で対応する必要があります。

“DeleteOnTermination” は ```ec2 modify-instance-attribute ``` にて対応可能です。

例)

$ aws ec2 modify-instance-attribute --instance-id i-xxxxxxxxxxxxxxxxxx --block-device-mappings file://ebs_conf2.json

$ cat ebs_conf.json 
[
  {
    "DeviceName": "/dev/xvda",
    "Ebs": {
      "DeleteOnTermination": false
    }
  }
]

AWS運用を、より便利にする AWS CLI 

AWSコンソールは直感的で入りやすいですが、何かを大量に操作・確認を行う場合は AWS CLI を利用するほうがラクな場合があります。
(AWSコンソールは良くも悪くもUIの変更があり、 AWS CLI はその点大きな変化は今の所確認されていません)

個人的に助かったのは、 RDS のパラメータグループの設定値確認でした。

AWSコンソールでパラメータグループを確認するとこのような画面で確認することになります。

表示数を最大にしても全て表示し切ることが出来ませんが、 AWS CLI であれば必要な項目のみ取得することが出来ます。

```rds describe-db-parameters``` と jq コマンドを使用することで、各パラメータで設定されている値がなにかを取得することが出来ます。

例)

$ aws rds describe-db-parameters --db-parameter-group-name "xxxxx" | jq -r '.Parameters[] | [.ParameterName,.ParameterValue] | @csv' | more
"allow-suspicious-udfs",
"autocommit",
"auto_increment_increment",
"auto_increment_offset",
"automatic_sp_privileges",
"back_log",
"basedir","/rdsdbbin/mysql"
"binlog_cache_size","32768"
"binlog_checksum",
"binlog_error_action",
"binlog_format","MIXED"
"binlogging_impossible_mode",
"binlog_max_flush_queue_time",
"binlog_order_commits",
"binlog_row_image",
"binlog_rows_query_log_events",
"binlog_stmt_cache_size",
"block_encryption_mode",
"bulk_insert_buffer_size",
"character_set_client",
"character-set-client-handshake",
"character_set_connection",
"character_set_database",
"character_set_filesystem",
~~~~~~

AWS CLI Command Reference は、AWS運用の参考書

AWS CLI はAWSサービスとやり取りするために存在しますが、リファレンス(AWS CLI Command Reference)は AWS CLI を使用しなくても、とても参考になります。

ユーザが出来る操作としては、 AWS CLI は最も対応範囲が広く「このサービスにこんな機能あるかな?」と当たりをつけたりするためにリファレンスを見ることがあります。

AWS Command Line Interface
https://awscli.amazonaws.com/v2/documentation/api/latest/index.html

AWS CLI に限らずコマンド(関数等)では一般的ではありますが、命名規則が整っていてとても可読性が良いかと思います。

AMI を作成するなら ```create-image``` 、 AMI を削除するなら ```copy-image``` とコマンド名からおおよそ何が出来るか検討がつくため、そのサービスにどのような機能が備わっているか把握するのにとても役立ちます。

またコマンドごとの説明も細かく、なれているサービスであればおおよそ理解が出来る点でも参考書のような使い方が出来ます。

AWS CLI まとめ

今回は AWS CLI 利用方法をご紹介させていただきました。

個人的にはとても便利ですがCUIということもあり、取っ掛かりがないと馴染みづらいツールではあると思います。

導入に手間がかかる部分をターン・アンド・フロンティアにおまかせ、ということも可能ですのでご興味のある方はぜひご連絡をお待ちしております。

元記事発行日: 2021年07月21日、最終更新日: 2021年07月21日