AWS Systems Manager に AWS CLI からアクセスをするまでの長い道のり
Amazon Connect の休日・祝日判定に、AWS Systems Manager のカレンダー機能と Lambda を使って実装するにあたり、AWS Command Line Interface(AWS CLI)を使えるようにしました。
環境構築にとても手間取ったので、メモ。
1.Homebrew 最新化
AWS CLI は Python3 の pip3 でインストールするのが手軽そうです。Python3 は Homebrew でインストール可能なので、現在の環境を確認します。
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
Warning: The following directories do not exist:
/usr/local/sbin
You should create these directories and change their ownership to your account.
sudo mkdir -p /usr/local/sbin
sudo chown -R $(whoami) /usr/local/sbin
Warning: Your Xcode (9.4.1) is too outdated.
Please update to Xcode 10.2.1 (or delete it).
Xcode can be updated from the App Store.
という感じで、なにやら Warning が大量に出ました。普段プログラミングや開発するような人ではないので、過去に Homebrew してから時間が経ち、そのままでは使え無さそうです。
Xcode のバージョンアップ
Warning: Your Xcode (9.4.1) is too outdated.Please update to Xcode 10.2.1 (or delete it).
ということで、AppStore から Xcode のバージョンアップを実施しました。これがまた非常に時間が掛かる。ネットを見ると、Xcode のバージョンアップに失敗、Appstore を経由しないバージョンアップ方法が紹介されていましたが、根気よく待ち続け AppStore からバージョンアップ出来ました。
Homebrew のアップデート
$ brew update
$ brew -v
Homebrew 2.2.4
$ brew doctor
Warning: The following directories do not exist:
/usr/local/sbin
You should create these directories and change their ownership to your account.
sudo mkdir -p /usr/local/sbin
sudo chown -R $(whoami) /usr/local/sbin
You should create these directories and change their ownership to your account.
という Warning を無視してアップデートしてみましたがやっぱりダメなようで、指示通りにディレクトリを作成。
$ sudo mkdir -p /usr/local/sbin
$ sudo chown -R $(whoami) /usr/local/sbin
$ brew doctor
Your system is ready to brew.
無事に利用できるようになりました。
2.Python3 インストール
$ brew install python3
Error: python 3.7.4_1 is already installed
To upgrade to 3.7.6_1, run `brew upgrade python`.
記憶がありませんが、Python3 はすでにインストールされているようです。ちと、なんのために入れたのか記憶がありませんでしたが、、
$ python3 -V
Python 3.7.4
一旦これで OK とします。
3.pip がいない
AWS CLI のインストールは pip で行います。
参考:macOS に AWS CLI バージョン 1 をインストールする – AWS Command Line Interface
$ pip3 --version
-bash: pip3: command not found
・・・ん?
$ which python3
/usr/local/bin/python3
$ python3 -m pip
/usr/local/bin/python3: No module named pip
python と一緒にインストールされるとのことですが、なぜ居ない?
ドンピシャな話?
参考:Python – mac -bash: pip-3: command not found の対処方法 (pip は反応する)|teratail
$ brew postinstall python3
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall python`
やってますが、、。リンク先にならって
$ sudo chown -R $(whoami):admin /usr/local
chown: /usr/local: Operation not permitted
失敗する・・。
4.Homebrew を再インスール
色々調べてみた結果、Homebrew から入れ直したほうが良さそうということに。
参考:HighSierraでHomebrewのbrew install、brew updateに失敗する場合の対処
参考:Homebrewを再インストールする方法 | ソフトアンテナブログ
Homebrew で何をインストールしたか既に覚えていないので別に構わないのですが、一応チェックしておきます。
$ brew leaves
ffmpeg
python
rbenv-gemset
ruby
unrar
最新のインストールコマンドなどをチェックします。
参考;macOS用パッケージマネージャー — Homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
でアインインストールして
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
再インストール完了。
$ brew doctor
Your system is ready to brew.
$ brew install python3
$ python --version
Python 3.7.6
さっさと再インストールすべきだった。OS アップデートとかに合わせて、定期的にやった方がいいかもです。
$ pip3 --version
pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
やっと pip に逢えた。
5.AWS CLI インストール
やっと AWS CLI のインストールに着手。
参考:macOS に AWS CLI バージョン 1 をインストールする – AWS Command Line Interface
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py --user
Successfully installed pip-20.0.2
$ pip3 install awscli --upgrade --user
Successfully installed PyYAML-5.2 awscli-1.17.9 botocore-1.14.9 colorama-0.4.1 docutils-0.15.2 jmespath-0.9.4 pyasn1-0.4.8 python-dateutil-2.8.1 rsa-3.4.2 s3transfer-0.3.2 six-1.14.0 urllib3-1.25.8
淡々とインストール完了したと思ったところで
$ aws --version
-bash: aws: command not found
・・・なぜなのか。公式ドキュメント通りにインストールしたと思ったのだけど、、
実行ファイルにパスを通していないのが原因らしい。
参考:AWS CLI の パス を通す – Qiita
$ pip3 list | grep aws
awscli 1.17.9
aws はインストールされてる
$ pip3 show awscli
Name: awscli
Version: 1.17.9
Summary: Universal Command Line Environment for AWS.
Home-page: http://aws.amazon.com/cli/
Author: Amazon Web Services
Author-email: UNKNOWN
License: Apache License 2.0
Location: /Users/**ユーザー名**/Library/Python/3.7/lib/python/site-packages
Requires: colorama, docutils, PyYAML, botocore, rsa, s3transfer
Required-by:
$ pip3 show awscli -f | grep /bin
../../../bin/aws
../../../bin/aws.cmd
../../../bin/aws_bash_completer
../../../bin/aws_completer
../../../bin/aws_zsh_completer.sh
$ vim .bash_profile
で、export PATH=/Users/**ユーザー名**/Library/Python/3.7/bin:$PATH
を追記。
$ aws --version
aws-cli/1.17.9 Python/3.7.6 Darwin/18.7.0 botocore/1.14.9
これでやっと、AWS CLI が使える下準備が完了しました、非常に長かった・・・。
6.AWS CLI 設定とアクセス
AWS にアクセスをするための設定を行います。
参考:AWS CLI の設定 – AWS Command Line Interface
$ aws configure
AWS Access Key ID [None]: ***********
AWS Secret Access Key [None]: ***********
Default region name [None]: ***********
Default output format [None]:
AWS Systems Manager で、既にカレンダーの作成が終わっている前提で、下記コマンドでカレンダーのステータスが返ってくることが確認できました。
$ aws ssm get-calendar-state --calendar-names **カレンダーのARN** --region **リージョン**
{
"State": "OPEN",
"AtTime": "2020-01-31T11:15:16Z"
}