のぴぴのメモ

自分用のLinuxとかの技術メモ

AWS CLIのセットアップ(RHEL/Mac)

1.Amazon LinuxAWS CLIをインストール

Amazon Linuxはデフォルトで、awsコマンドがインストールされています。公式ドキュメントはこちらです。

2.RHEL&Mac AWS CLIをインストール

インストール手順の 公式ドキュメントは以下になります。

2.1 システムワイドで使う(/usr/binにインストールする)

公式ドキュメントと違う点は、sudoでroot権限で、"--user"オプションを付けずに実行するところです。実行すると、awsコマンドと前提のpipとも、"/usr/bin"にインストールされます。
(1)pipをインストールする

 curl -O https://bootstrap.pypa.io/get-pip.py
 sudo python get-pip.py

(2)AWS CLIをインストールする

 sudo pip install awscli --upgrade

2.2ユーザ個別に使う(~/.local/binにインストールする)

公式ドキュメントの通りに実行すると、ユーザのホームディレクトリ配架にインストールされます。
(1)pipをインストールする

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py --user

(2)AWS CLIをインストールする

$ pip install awscli --upgrade --user

2.3 セットアップ時の補足事項

公式ドキュメント記載以外で私がハマった内容をメモっておきます。
(1)MacでpipによるAWS CLIインストールでpipがエラーとなった時の対処
私の環境では下記コマンド実行時にエラーが出て止まりました。

$ pip3 install awscli --upgrade --user
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 7, in <module>
    from pip import main
ImportError: cannot import name 'main'

stack overflow*1の記事を参考に、下記のようにpipを再インストールして対処しました。
(というか、最初からaptコマンドで、python3-pipを入れろということかもしれないです。)

$ sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

(2)"~/"配下にawsコマンドをインストールした時のPATH追加
AWS CLIのインストール先"~/Library/Python/3.6/bin/"は手動でパス登録する必要があります。

  • ファイル:~/.bash_profile ※デフォルトでは無いです。
  • 設定後、ターミナルを再起動して確認
PATH=${PATH}:~/Library/Python/3.6/bin/
export PAHT

3.AWS CLIの設定

3.1 管理用のPCからAWS CLIを利用する場合(アクセスキーによる認証)

設定手順は、こちらの公式ページを参照して下さい。
アクセスキーの漏洩によるアカウント乗っ取りの可能があるので、EC2インスタンス上でAWS CLIを利用する場合は、次のIAMロールをEC2に割り当てる方法の利用を検討します。*2
(1)IAMユーザのアクセスキー ID とシークレットアクセスキーの生成と取得
以下は公式ドキュメントからの抜粋です。

  • IAM コンソールを開きます。
  • コンソールのナビゲーションペインで、[Users] を選択します。
  • IAM のユーザー名 (チェックボックスではありません) を選択します。
  • [Security credentials] タブを選択し、次に [Create access key] を選択します。
  • 新しいアクセスキーを表示するには、[Show] を選択します。認証情報は以下のようになります。

(2)AWS CLI設定
aws cliに、取得したアクセスキーとシークレットアクセスキー、デフォルトリージョンを設定します。

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXX      <==アクセスキーを設定
AWS Secret Access Key [None]: YYYYYYYYYYYY  <==シークレットアクセスキーを設定
Default region name [None]: ap-northeast-1  <==デフォルトリージョン設定( ap-northeast-1は東京リージョン)
Default output format [None]:

3.2 EC2からAWS CLIを利用する場合(EC2にIAMロール割り当て)

ユーザガイドは私にはわかりずらかったです。こちらの公式ブログの記事の方がわかりやすかったです。
(1)IAM ロールの作成

  • IAM コンソールを開きます。
  • コンソールのナビゲーションペインで、[Roles] を選択します。
  • [Create role]を選択します。
  • [AWS Service]を選び、許可したいサービスを選び[Next Permission]で進む。
  • 適切なpolicyを選び[next:Review]で進む。
  • Roleの名前と詳細説明を入力し、[Create Role]でロールを作成する

(2)EC2へのRole割り当て

  • EC2コンソールを開きます。
  • コンソールのナビゲーションペインで、[Instances] を選択します。
  • [Create Instance]インスタンス作成中に、作成したRoleを割り当てるか、
  • 割り当てたいインスタン(起動中も可)を選択し、[Attach/Replace IAM Role]で作成したロールをEC2に適用

(3)AWS CLI設定
ロールを割り当てる場合は、アクセスキーとシークレットキーは設定しないようにします。

$ aws configure
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: ap-northeast-1  <==デフォルトリージョン設定( ap-northeast-1は東京リージョン)
Default output format [None]:

4.その他

4.1 コマンド保管

awsコマンドを[TAB]キーで保管してくれるAWSコンプリータという機能があります。これをシェルに組み込めばコマンドを保管してくれます(pythonだからかわかりませんが、保管までに微妙な間があり使いづらいですが)。公式ドキュメントはこちらです。
(1)AWSコンプリータの場所を確認する

$ which aws_completer
/usr/bin/aws_completer

(2)プロファイルに組み込む
環境に依存しますが、例えば "~/.bash_profile"の末尾に下記行を追加します。

#Enable aws command autocompletion
complete -C '/usr/bin/aws_completer' aws

(3)反映
プロファイルを読み込み設定を反映させます。

source .bash_profile

4.2 AWS CLIの設定ファイル

コマンドの設定ファイルは、ホームディレクトリの.awsというディレクトリ(~/.aws)に格納されます。

  • ~/.awsディレクト
    • config    デフォルトリージョンなどの設定
    • credentials アクセスキーとシークレットアクセスキー