はじめに
2018年8月ごろAWSから以下のようなお知らせがありました
- Google, Apple および Mozillaが2018年10月からSymantecのルート認証局を信頼性を無効化すると発表しているよ
- モバイルアプリやWEBアプリからAWS IoTへの接続できなくなるかも
- AWS IoTではAmazon Trust Serviceが署名したサーバ証明書とそれにひもづくエンドポイントを用意してるよ
- 新しい証明書とエンドポイントを使用することを推奨するよ
元記事はこの辺に掲載がありQiitaでも解説してる記事が上がってて証明書とエンドポイントの取得方法もこちらに載ってます。結構前のことなんですが自分は最近になって更新しようとしてはaws cliの使用ではまったことがあったのでちょっとメモがてら書こうと思います。自分が間抜けだった説あり
エンドポイントの更新と発生したエラー
- aws cliの導入。この辺の記事を見てやった
- aws cliのconfigureの設定。同上
- aws iot describe-endpoint --endpoint-type iot:Data-ATSを実行
とこれでエンドポイントが取得できるはずだったが以下のようなエラーが発生
An HTTP Client raised and unhandled exception: __init__() got an unexpected keyword argument 'ssl_context'
悲しい
解決方法
解決方法としてはなんのことはないaws cliをpython2で実行するとダメだったっぽい。
python 3.6.5にして実行すると問題なくエンドポイントの取得ができた。
pyenv環境でやっていたためpythhon3でやっていたつもりがsystemのpython2で起動していたようだった。
aws cliをpython2からpython3へ変更しエンドポイントを取得する
この記事参考
- 環境をpython2に変更し、aws cliをアンインストールする
$ pyenv global system
$ sudo pip uninstall awscli
- 環境をpython3へ変更し(自分の場合は3.6.5をインストール済みだった)、aws cliを再インストールする
$ pyenv global 3.6.5
$ sudo pip install awscli
- aws iot describe-endpoint --endpoint-type iot:Data-ATSを実行すればATSのエンドポイントが手に入る
まとめ
今回のエラーはAWS IoTだけではなくてS3やlambdaへのアクセスでも起きたのでpython2では使えなくなったのかな?とも思ったけどこのドキュメントでは2.6.5以降は使えそうな様子(自分のsystem環境のpythonは2.7.12だった)。
詳しい原因は不明のままだったけどpython3でアクセスするのが安定かなーとは思う