私はAWS EC2イメージ(AMI)を作成するためにパッカーを使用しています。 Ansibleは、Java 8のインストール、データベース(Cassandra)のインストール、Ansibleのインストール、Ansibleプレイブックのアップロード(私はgitにプッシュブックをプッシュしてプルする必要があることを知っています。インスタンスがAMIから起動されたときにカサンドラのプロパティのいくつかを変更する必要があるため(例:カサンドラのオプションで現在のインスタンスIPを追加する)、私はAnsibleをインストールして、プレイブックをアップロードしています。これを達成するために、簡単なbashスクリプトを書いた。これはuser-data-file
というプロパティーとして追加されている。これはスクリプトです:EC2インスタンス上のユーザーデータスクリプトを使用して安全なプレイを実行してください。
#cloud-boothook
#!/bin/bash
#cloud-config
output: {all: '| tee -a /var/log/cloud-init-output.log'}
ansible-playbook -i "localhost," -c local /usr/local/etc/replace_cassandra.yaml
私が見ることができるように、私はローカルホストモードで無能なプレイブックを実行しています。
問題は、インスタンスを開始するときに、/var/log/cloud-init.log
ファイル内にエラーが見つかりました。エラーansible-playbook
が見つかりませんでした。そこで行をユーザデータスクリプトの中に追加して、/usr/bin/
フォルダ(Anabilitiesがインストールされているフォルダ)の内容をチェックし、そこにAnabilitiesはありませんでしたが、sshでインスタンスにアクセスすると、 /usr/bin/
フォルダ内に存在しており、無能なプレイブックの実行に問題はありません。
誰も同じような問題が発生しましたか?私はこれがEC2のAnsibleの非常にポピュラーなユースケースになるはずだと思います。
EDIT
一部伐採した後、私は何のAnsibleは、ユーザデータの実行中に、存在しないだけでなく、ことが分かったが、データベースにも欠けています。
PackerのAnsibleプロビジョナのコードの一部(またはそのすべて)が、インスタンスの起動時に実行される可能性はありますか?
EDIT2
私はここで何が起こっているのかを見出しました。パックデータをuser_data_file
プロパティのパッカーで追加すると、パッカーがインスタンスを起動してAMIをビルドするときにユーザーデータが実行されます。 ScriptはAnabilitiesプロビジョナが実行される前に起動されるため、Anabilitiesが存在しないのはそのためです。
私がしたいのは、ユーザーデータをAMIに自動的に追加することです。その結果、AMIからインスタンスが起動されると、パッカーが前記AMIを構築するときではなくユーザーデータが実行されます。
これを行う方法に関するアイデアはありますか?
#cloud-config形式が間違っているようです。この[doc](http://cloudinit.readthedocs.io/en/latest/topics/examples.html#run-commands-on-first-boot)のように 'bootcmd:'にansible-playbookコマンドを入れてみてください –
Iこれが問題だとは思わないでください。私が質問したところでは、 '/ usr/bin'フォルダには' ansible-playbook'がありません。それがコードが機能しない理由です。 –
同様の問題は、ここでは、単にパッカーなしで: pip install ansible; アシスタントプレイブック... 不可能なプレイブック用にfoudではないコマンドで失敗する –