ec2 ホストに対して ansible-playbook を実行できません。ターミナル経由の SSH は正常に動作しています。

ec2 ホストに対して ansible-playbook を実行できません。ターミナル経由の SSH は正常に動作しています。

ポート 22 を開いた ec2 インスタンスを作成し、ターミナルから秘密キーを使用してこのインスタンスに接続できますが、ansible-playbook を試しても接続できません。動的インベントリを使用しています。

SSH に使用するコマンドも成功します (秘密鍵が配置されている以下のコマンドを実行しています)。

ssh -i "test-key.pem" [email protected]

プレイブックの内容:

---
- name: Hello World example
  hosts: all
  become: true

  tasks:
    - name: Printing Hello World
      debug:
          msg: "Hello World"

実行したコマンド:

ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id playbook-hello.yml

私も試してみました:

ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id -e 'ansible_ssh_user=ubuntu' playbook-hello.yml

エラー:

fatal: [x.x.x.x]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host x.x.x.x port 22: Operation timed out\r\n", "unreachable": true}

その他の情報:

MacBook Pro で ansible-playbooks を実行しています。EC2 インスタンスは Ubuntu OS 18.04 を実行しています。

./ec2.py を実行すると、インスタンスが印刷されているのがわかります。AWS キーはホーム ディレクトリの .aws/credentials フォルダーに保存されます。

追伸: この質問は他の質問と重複している可能性がありますが、私のケースに一致する肯定的な洞察は得られませんでした。

答え1

使用された ec2.py スクリプトがプライベート IP を持つインスタンスのみを返すことを理解したのは私のミスでした。そのため、ポート 22 のインスタンスに接続できませんでした。

ただし、ssh を実行するときは、パブリック IP または DNS 名を使用していました。

そこで、ec2.py を使用する代わりに、パブリック IP を使用してスクリプトを実行しました。

ansible-playbook -i a.b.c.d, playbook-hello-world.yml

abcd -- インスタンスのパブリック IP です。

万が一、以下のエラーが発生した場合:

TASK [Gathering Facts] ***************************************************************************************************************************************
fatal: [a.b.c.d]: FAILED! => {"changed": false, "module_stderr": "Shared connection to a.b.c.d closed.\r\n", "module_stdout": "/bin/sh: 1: /usr/local/bin/python3: not found\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}

以下のコマンドを使用してください:

ansible-playbook -i a.b.c.d, -e 'ansible_python_interpreter=/usr/bin/python3' playbook-hello-world.yml

プレイブックを実行しようとしているインスタンスの指定されたパスに pythos3 がインストールされていることを確認してください。

関連情報