2016-11-15 35 views
0

Amazon Linux ec2インスタンスのブートでAWSに特化したスクリプトとスクリプトを実行しています。これはカスタムAMIイメージですが、Java、Maven、Gradleがインストールされているだけで、Amazon Linuxマシンのものです。Amazon Linux ec2ブートでSpringブートアプリケーションを起動するためのユーザーデータスクリプト

現在私が抱えている問題は、Springブートアプリケーションが格納されているec2インスタンスに、ポート8080のTomcatサーバーを自動的に起動/起動させたいということです。理想的には、これは、AWSを介してインスタンスを起動するときに、サーバーがすでにインスタンスなしで実行されていることを意味します。インスタンス設定に「ユーザーデータ」を追加するとこれが解決すると信じていましたが、起動時にスクリプトが実行されていないようです。 init.dファイルには、ユーザーデータが実行されたことを示すログや、出力をtxtファイルにパイプしたときに作成されたファイルはありません。誰かが似たような経験をしているなら、これにアプローチする方法に関するアドバイスが大好きです。

私は、「ユーザデータ」にロードしていたスクリプトは、テキストのようになります。

<myApp>は、ビルドコマンドの結果として生成私のアプリのjarファイルである
#!/bin/bash 
cd ~/java-service-tier 
./gradlew clean build 
java -jar build/libs/<myApp>.jar 

私のプロジェクトでは、Springブートで中間層のJavaサービスアプリケーションを使用して、Amazon RDSでホストされているMySQLデータベースと対話しています。これはGradleで構築されています。次に、サービス層の応答を基にして、サービスレイヤと通信してデータ要求を行い、フロントエンドを角度で操作するWeb層レイヤが存在します。アーキテクチャの設定は問題ありませんが、問題はありませんが、関連性のあるケースについてはいくつかの背景を述べたいと思いました。

答えて

1

相対パスとシェル固有の変数を使用しないでください。スクリプトは特定の環境変数が設定されることを期待していますか?

<full-path-to-home>/java-service-tier/gradlew clean build 
java -jar <full-path>/build/libs/<myApp>.jar 
+0

ありがとうございます。私はこれらの変更を反映するためにユーザーデータスクリプトを変更しました。インスタンスの起動時にはまだ実行されません。このスクリプトは、JAVA_HOMEが設定されることを期待していますが、ec2インスタンス上のSSHセッション中にすでに行っているので、JAVA_HOMEを設定する必要はありません。 – bang

+0

いいえ、スクリプト内でJAVA_HOMEをエクスポートする必要があります。間違えている。あなたのログインセッションスクリプトは実行されません。何も仮定しないでください。スクリプトを自己完結型にする方がよいでしょう。テストするたびにインスタンスを起動するのではなく、 'curl'または' ec2metadata'を使ってユーザデータを取得し、変数を設定しないでシェルでテストしてください(制限された環境) – helloV

+0

これは#cloud-boothook私のユーザーデータエントリの。これについて私が理解することは、私が望むように、それがユーザーデータをそれぞれの起動を実行させることになるということです。私は問題がサーバーの停止/起動が「起動」を構成しておらず、スクリプトを実行しなかったと仮定しています。環境変数の設定に関しては、これは将来のスクリプト作成のために知っておくと良いことです。助けてくれてありがとう。 – bang

関連する問題