リモート開発メインのソフトウェア開発企業のエンジニアブログです

Ansibleに関するエラーを解消する

最近遭遇したエラーについて簡単に解消方法を提示します。小さいトピックなので2つのエラーについてまとめていっきに書いてみます。

  • HomebrewでインストールしたAnsibleのtmpディレクトリの所有者がrootになってしまう。
  • Python2ベースのAnsibleでAWSのクレデンシャルを通常のものからロール形式に変えたらデプロイエラーが出るようになった。

HomebrewでインストールしたAnsibleのtmpディレクトリの所有者がrootになってしまう。

brew install ansible の後、基本的なansibleのコマンド(ansible –versionなど)を実行しないで、いきなりansible-playbook系のコマンドを実行したら、上記の現象が発生しました。

$ sudo ls -ltra /Users/koji/.ansible

drwx------   2 root    staff    64  1  3 19:16 tmp

同じ現象で悩んでいる人を見つけましたが、解決したのかどうかいまいち分かりません。

https://stackoverflow.com/questions/59833734/ansible-version-command-throws-an-error

そこで、もうWeb検索には頼らず、tmpディレクトリの所有者がkoji(自身のユーザー)になる手順を探ることにしました。

まずはansibleを一度まっさらにしたいので、アンインストールします。

$ brew uninstall ansible

個人のansible設定も全て消しておきます。(tmpの上位ディレクトリをまるまる消す。)root所有のディレクトリを消すので、sudoを付けます。

$ sudo rm -rf /Users/koji/.ansible

そして、色々試した結果、再度インストールした後、すぐにversionコマンドを打てば問題を解決できることが分かったということでひと段落しました。

$ brew install ansible
$ ansible --version
$ ls -ltra /Users/koji/.ansible

drwxrwxr--   2 koji    staff    64  1  3 19:16 tmp

Homebrewでインストールした後は、ユーザー配下の設定関連ディレクトリの所有者や権限をチェックする癖をつけた方が良さそうですね。

解決してからエラーの内容を読めば、素直にエラーを出してくれているのですが、ちょっとイレギュラーなケースで辛い現象ですね;;

Python2ベースのAnsibleでAWSのクレデンシャルを標準のものからロール形式に変えたらデプロイエラーが出るようになった。

標準のクレデンシャルの書き方(/Users/koji/.aws/credencials)

[my-project]
aws_access_key_id = AAAAAAAAAAAAAAAA
aws_secret_access_key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

ロール形式の書き方(/Users/koji/.aws/credencials)

[koji]
aws_access_key_id = AAAAAAAAAAAAAAAA
aws_secret_access_key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

[my-project]
role_arn = arn:aws:iam::111111000000:role/iam-my-pjt-role
region = us-east-1
source_profile = koji

公式のページを見つけられていないのですが、ロール形式は非サポートなのかもしれません。

結論を書いてしまいますが、Python2ベースからPython3ベースのansibleにアップデートすることで解決しました。特にansibleのymlファイルを修正する必要はなかったので、ある程度互換性を持っているようです。

アップデート方法を一応載せておきます。

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --set python /usr/bin/python3.6
sudo pip install ansible boto3

ちなみに標準のクレデンシャルですと以下のようなエラーが出ます。

File "/usr/local/lib/python2.7/dist-packages/boto/sts/__init__.py", line 51, in
connect_to_region     **kw_params)   

File "/usr/local/lib/python2.7/dist-packages/boto/regioninfo.py", line 220, in connect
return region.connect(**kw_params)   

File "/usr/local/lib/python2.7/dist-packages/boto/regioninfo.py", line 290, in connect
return self.connection_cls(region=self, **kw_params)   

File "/usr/local/lib/python2.7/dist-packages/boto/sts/connection.py",
line 107, in __init__     provider=provider)   

File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1100, in
__init__     provider=provider)   File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 555, in __init__
profile_name)   

File "/usr/local/lib/python2.7/dist-packages/boto/provider.py", line 201, in __init__
self.get_credentials(access_key, secret_key, security_token, profile_name)   

File "/usr/local/lib/python2.7/dist-
packages/boto/provider.py", line 297, in get_credentials     profile_name) boto.provider.ProfileNotFoundError: Profile "my-project" not found!

面倒ですが、ツール類のアップデートはこまめにしたいものですね!

← 前の投稿

BERTのモデル構造をもう少し詳しく

次の投稿 →

MySQL で一意制約が削除できない

コメントを残す