web-dev-qa-db-ja.com

ec2でansibleを介してsystemdをデフォルトのユーザーとしてサービスを実行(パスワードを要求)

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を成功させる方法を理解できるでしょう。

もちろん、最初から間違った角度からアプローチしている可能性も高くありません。なぜなら、このシナリオに関係するほとんどすべてのことをかなり新しいからです。

4
MikeiLL

グローバルSudoがある場合は、Sudo特権を必要としない2つのタスクにbecome: noを追加します。

1
xddsg