箱のプログラミング日記。

えんじにあ奮闘記

AWS CLIをインストール + 初期設定まで

f:id:y_hakoiri:20191102134313j:plain

業務で色々とAWSを触らせてもらい、コンソールからの操作にだいぶ慣れたのでCLIに挑戦してみようかなと思い立ちインストールしてみた。

AWS CLIとは

AWS Command Line Interface (AWS CLI) は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。AWS CLI を使用すると、最小限の設定で、任意のターミナルプログラムのコマンドプロンプトから、ブラウザベースの AWS マネジメントコンソール で提供される機能と同等の機能を実装するコマンドを実行できます。

AWS Command Line Interface とは - AWS Command Line Interface

コンソール上からできることはコマンドラインでも概ね実行可能な模様。

毎回いちいちログインしたり、各サービスページを行き来したりするのが面倒だったので、CLIから操作できるようになればめっちゃ楽になりそう。

AWS CLIをインストール

2021年2月現在で最新バージョンは2系。1系は非推奨のようなので2系をインストールしていく。

OSによってインストール手順が異なるため以下を参照してください。

AWS CLI バージョン 2 のインストール、更新、アンインストール - AWS Command Line Interface

今回はmacOSにコマンドラインを使って、現在のユーザーのみを対象としてインストールしていきます。

インストール先のディレクトリを指定

AWS CLIのインストール先をデフォルトのrootではなく特定のユーザーのホームディレクトリに指定したい場合、以下のようなXMLファイルを作成する

$ vim aws-install.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <array>
    <dict>
      <key>choiceAttribute</key>
      <string>customLocation</string>
      <key>attributeSetting</key>
      <string>/Users/hako</string>
      <key>choiceIdentifier</key>
      <string>default</string>
    </dict>
  </array>
</plist>

/Users/hakoの部分を任意のユーザー名に変えます

インストーラパッケージをダウンロード

特にバージョンの指定がない場合は以下コマンドでダウンロードを実行。

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"

実行結果

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 22.5M  100 22.5M    0     0  6146k      0  0:00:03  0:00:03 --:--:-- 6145k

先ほどXMLファイルのパスで指定したディレクトリにaws-cliがダウンロードされます。

$ pwd
/Users/hako
$ ls | grep aws-cli
aws-cli

ちなみにバージョンを指定してダウンロードする場合は以下

curl "https://awscli.amazonaws.com/AWSCLIV2-2.0.30.pkg" -o "AWSCLIV2.pkg"

インストーラプログラムを実行(インストールを実行)

先ほどダウンロードしたインストーラパッケージのプログラムを実行して、インストールを実行します

installer -pkg AWSCLIV2.pkg \
            -target CurrentUserHomeDirectory \
            -applyChoiceChangesXML aws-install.xml

aws-install.xmlは最初に作成したXMLファイル。実行ディレクトリからの相対パスを指定します

実行結果

installer: Package name is AWS Command Line Interface
installer: choices changes file 'aws-install.xml' applied
installer: Installing at base path /Users/hako
installer: The install was successful.

ちなみにこの状態ではまだ使えない。

$ aws --version
-bash: aws: command not found

パスを通す

自動でパスが通らないので、シンボリックリンクを作成してパスを通してあげる。

作成先は/usr/local/binとかで良いと思う。

$ sudo ln -s /Users/hako/aws-cli/aws /usr/local/bin/aws
$ sudo ln -s /Users/hako/aws-cli/aws_completer /usr/local/bin/aws_completer
$ aws --version
aws-cli/2.1.24 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off

できた。

configureの設定

晴れてaws-cliを使えるようになったけど、アクセス情報やアクセス先のリージョンを指定しないと実際に使用したいコマンドを走らせることはできない。

$ aws ec2 describe-instances  --instance-ids i-**************

You must specify a region. You can also configure your region by running "aws configure".

(※describe-instancesは引数に与えたインスタンスの情報を取得するもの)

リージョンが指定されていないので探せないよというエラーになる。実際にはリージョンだけでなくアクセスキーなども指定しなければ弾かれてしまうので、この辺りのデフォルト値を設定しておく

$ aws configure
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: 
Default output format [None]: 

aws configureを実行すると、順にAWSアクセスキーやリージョンなど必要な情報の入力を求められるので順に入力していく。[None]というのは現在の設定値。

アクセスキーとシークレットアクセスキーはAMIを作成したときに発行されたもの。後から参照することはできないので、忘れてしまった場合は再度AMI作成するなりして用意。

Default output formatは出力結果をどの形式にしたいか。json,yaml,text,tableなどから選べる。

(全部試してみたけどymlが一番見やすかったのでymlにしました)

こんな感じで設定したあと、

$ aws configure
AWS Access Key ID [None]: *****************
AWS Secret Access Key [None]: *************************
Default region name [None]: ap-northeast-1
Default output format [None]: yaml

もう一度先ほどのdescribe-instancesを実行

$ aws ec2 describe-instances  --instance-ids i-**************

今度は無事yml形式で結果が返ってきました。

- Reservations:
  - Groups: []
    Instances:
    - AmiLaunchIndex: 0
      Architecture: x86_64
      BlockDeviceMappings:
      - DeviceName: /dev/xvda
        Ebs:
          AttachTime: '2021-01-19T09:38:23+00:00'
          DeleteOnTermination: true
          Status: attached
          VolumeId: ***********
  ・
  ・
  ・

ちなみに、aws configureで設定した値はそれぞれ下記に書き込まれているようです

$ cat /Users/hako/.aws/config
[default]
region = ap-northeast-1
output = yaml
$ cat /Users/hako/.aws/credentials
[default]
aws_access_key_id = **************
aws_secret_access_key = ******************************

接続先のアカウントやリージョンが複数あってデフォルト値をいくつか用意したい場合は--profileオプションで用意することもできるらしい。詳しくは以下 設定の基本 - AWS Command Line Interface

参考

AWS Command Line Interface とは - AWS Command Line Interface

AWS CLI Command Reference — AWS CLI 2.1.24 Command Reference