#概要
今回は、Ansible及びDockerを用いて、AWSのEC2にインスタンスを作成し、アプリケーションを起動させるまでの一連の流れを体験しました。その中で、エラーが頻発してなかなか抜け出せないポイントがいくつかあったので、自分用の備忘録も兼ねてまとめたいと思います。
環境
- OS: Windows10 pro 1803
- Visual Studio Code: 1.28.2
- Docker: 18.06.1-ce
- ansible: 2.5.5
AWSと繋がらない
- Dockerでコンテナを立てて、AWSに接続しようとすると、以下のようなエラーが出ることがあります。
botocore.exceptions.EndpointConnectionError: Could not connect to the endpoint URL: "https://ec2.ap-northeast-1.amazonaws.com/"
原因
少し調べても、エラーの原因は特定できず。現在、Docker for Windowsの動作が不安定であるという記事が散見されるので、今後のアップデートに期待です。
解決策
- このエラーは、Dockerを再起動することで回避することが出来ます。
AWSのCLI設定が行えていない
- AWSに接続してインスタンスを作成する際に、AWS CLIの設定が正しくないために以下のエラー文が出て処理が中断されることがあります。
ClientError: An error occurred (AuthFailure) when calling the DescribeKeyPairs operation: Authorization header or parameters are not formatted correctly.
原因
このエラーは、利用者のセキュリティ認証情報やデフォルトリージョンなどの設定がされてないまま、インスタンスの作成を実行したときに発生します。
解決策
Dockerコンテナ作成後に、aws configureコマンドを用いて設定を行うか、ワークスペース内に存在する「.aws」フォルダ内に「credentials」と「config」ファイルを作成して、定義することで回避できます。
実行権限がない
Playbookを実行する際に、root権限で実行していないことから、以下のようなエラー文がでることがあります。
"You need to be root to perform this command.\n"
原因
このエラーは、単純に現在Playbookをたたいているユーザーが実行権限を持っていないために、taskを実行できないという状態です
解決策
現在実行中のユーザーに権限を付与するか、Ansibleのbecomeモジュールを用いて、ルートユーザーとして実行することで、回避できます。
ssh接続が切断されて、Playbookの処理が中断される
- アプリケーションのインストール処理などのtaskが終了して、次のtaskに移る際に、以下のようなエラー文がでて処理が終了することがあります。
"data could not be sent to the remote host. Make sure this host can be reached over ssh"
原因
このエラーは、長い処理を行っている際に、処理の終了を待たずに次の処理に進んでしまう場合や、ssh接続の切断などが起こった後に発生します
解決策
ansibleのasyncモジュールを用いて、非同期処理を行うことで回避できます。
まとめ
- エラー文の内容は一見難しいと思えるが、そのまま検索にかければ過去に同じような質問をした人のページに行き着いたりするので、とりあえず検索してみるのがベストかもしれません。
- 基本的に、解決策が見つかっているなら、その策を実現できそうなモジュールがないかを探ることが重要。求めているものがピンポイントでモジュールとして用意されてたりします。
- それでも難しいならcommand、shellモジュールで無理やり解決するのもよいです。しかし、あくまで最終手段として利用するものであり、冪統制の担保が最優先です。