EC2(マイクロ)インスタンスのRailsアプリに対してsystemd
を介してUnicornを実行するために、次のAnsibleスクリプト(プレイブックの一部)を使用しようとしています:
---
- name: restart Unicorn
command: psql -h {{ db_Host }} -U {{ db_user }} -d {{ db }} -c "SELECT true FROM pg_tables WHERE tablename = 'order_cycles';"
register: table_exists
ignore_errors: yes
Sudo: yes
Sudo_user: "{{ Unicorn_user }}"
notify: restart Unicorn step 2
#TODO make sure both of these things run as one handler.
- name: restart Unicorn step 2
service:
name: Unicorn_{{ app }}
state: restarted
when: table_exists.stderr.find('does not exist') == -1
# If Unicorn isn't actually started yet we probably need this:
notify: start Unicorn
- name: start Unicorn
service:
name: Unicorn_{{ app }}
state: started
プレイブックで構成されているユーザーはubuntu
で、デフォルト(EC2)ユーザーであり、ここでInteractive authentication required
エラーが発生しているため、デプロイのコマンドラインで直接トラブルシューティングを行っています-サーバーに接続し、この障害に遭遇しました。
Sudoとして実行できます。
$ Sudo systemctl start Unicorn_myapp.service
サーバーのコマンドラインから直接、または Ansibleのraw メソッドを使用して成功します。
しかし、Railsサーバー、ユーザーubuntu
によって実行されている)にはアクセスできません(少なくとも、これは.sock failed (111: Connection refused
エラーの原因を調査している手段です) 。
Sudoなしで実行すると、パスワードが要求されますが、私の知る限り、EC2 ubuntuユーザーはパスワードなしで実行されます。
私は回避策が パスワードで新しいユーザーを作成する であり、Railsとsystemctl/Unicornをそのユーザーとして実行する)かもしれないことを知っていますが、それは実際のことではないと思いますこの問題に答えてください。なお、プレイブックの開発者は最近、セキュリティ上の理由から、プレイブックからuser_password
を完全に削除しました。
Root以外のユーザーとしてsystemd
を実行する方法を理解できれば、Ansibleを成功させる方法を理解できるでしょう。
もちろん、最初から間違った角度からアプローチしている可能性も高くありません。なぜなら、このシナリオに関係するほとんどすべてのことをかなり新しいからです。
グローバルSudoがある場合は、Sudo特権を必要としない2つのタスクにbecome: no
を追加します。