あなたのAlexaダッシュボード 設定

サンプルカスタムスキルをウェブサービスとしてデプロイする

Alexa Skills Kitで提供するJavaサンプルは、ウェブサービスとしてホストすることができます。このドキュメントでは、コマンドライン上でサンプルを実行する場合と、サンプルをAmazon Web ServicesのサービスであるAWS Elastic Beanstalkでウェブサービスとしてデプロイする場合の両方のシナリオの手順を説明します。

通常は、サンプルをAWS LambdaAmazon Web Servicesが提供するサービスの1つ)上のAWS Lambda関数としてデプロイおよびテストするほうが迅速かつ簡単です。Lambdaは、Java、Node.jsのどちらのサンプルでも利用できます。詳細な手順については、「サンプルカスタムスキルをAWS Lambdaにデプロイする」を参照してください。

サンプルは、GitHubのリポジトリで入手できます。サンプルの入手方法と特定のサンプルの詳細については、「Alexa Skills Kitサンプルを使用する(カスタムスキル)」を参照してください。

システム要件

サンプルをセットアップして実行するには以下の要件を満たす必要があります。

  • repoディレクトリで提供されるJavaライブラリ(alexa-skills-kit-x.x.jar)。
  • Java SE Development Kit(JDK)7以降。JDKをダウンロードするには、http://www.oracle.com/technetwork/java/javase/downloads/index.htmlにアクセスしてください。
  • Maven。依存関係管理とサンプルのビルドのために使用します。

追加の要件は、サンプルのテスト方法によって異なります。以下の関連セクションを参照してください。

コマンドラインからサンプルをビルドして実行する

これらの手順は、LinuxプラットフォームのコマンドラインからHello Worldサンプルをビルドして実行する方法を示しています。これにより、cURLなどのコマンドラインツールを使用してHTTPリクエストを送信できます。

src/main/javaフォルダーのLauncherクラスは、HelloWorldSpeechletなど、いずれかのサンプル用のSpeechletをホストできるJettyサーバーを起動します。この方法はコマンドラインからサンプルを実行する便利な方法です。

この方法では、通常、インターネットでアクセス可能なエンドポイントを介してサンプルを実行できないため、実際の端末を使用してコードをテストすることはできません。ただし、Alexaスキルでウェブサービスによって使用されるリクエストや応答を理解するためには、コマンドライン上でのテストは有効です。サンプルをクラウドにデプロイする例については、下の「Elastic BeanstalkでHello Worldをセットアップする」を参照してください。

コマンドラインからHello Worldを実行するには、前述のJavaの要件に加えて以下のツールが必要となります。

コマンドラインからサンプルを実行するには、以下の手順を実行してください。

  1. amzn/alexa-skills-kit-java GitHubリポジトリをダウンロードするか、クローンを作成します。
  2. カスタムスキルをテストするを参照して、自己署名証明書を作成します。
  3. 秘密鍵と証明書を使用してJavaキーストアをセットアップし、サンプルのpom.xmlファイルにキーストアの情報を含めます。「SSL/TLS Javaキーストアをセットアップする」を参照してください。
  4. Mavenを使ってサンプルをビルドして実行し、cURLを使用してサンプルにリクエストを送信して応答を書き留めます。「コマンドラインからサンプルを実行する」を参照してください。

これらの手順では、<alexa-skills-kit-folder>が、GitHubリポジトリからクローン作成したフォルダーになります。

SSL/TLS Javaキーストアをセットアップする

これらの手順に従って、Javaキーストアを作成し、作成したキーストアを使用してHello Worldサンプルをコンフィギュレーションし、ビルドします。

  1. 秘密鍵自己署名証明書を作成します。詳細な手順については、「カスタムスキルをテストする」を参照してください。
  2. 以下のopensslコマンドを使用して、秘密鍵と証明書からPKCS #12アーカイブファイルを作成します。private-key.pemcertificate.pemの値を秘密鍵と証明書のファイル名で置き換えてください。プロンプトが出たら、アーカイブのパスワードを指定します。

    openssl pkcs12 \
         -keypbe PBE-SHA1-3DES \
         -certpbe PBE-SHA1-3DES \
         -inkey private-key.pem \
         -in certificate.pem -export \
         -out keystore.pkcs12 \
    

    Indented paraâ?|

  3. 以下のkeytoolコマンドを使用して、PKCS #12ファイルをJavaキーストアにインポートします。その際、インポート元のPKCS #12アーカイブとインポート先のキーストアの両方のパスワードを指定してください。

    $JAVA_HOME/bin/keytool \
         -importkeystore \
         -destkeystore java-keystore.jks \
         -srckeystore keystore.pkcs12 \
         -srcstoretype PKCS12 \
    
  4. <alexa-skills-kit-folder>/samples内のpom.xmlファイルを編集して、システムプロパティjavax.net.ssl.keyStoreおよびjavax.net.ssl.keyStorePasswordの設定を指定します。キーストアへのパスと前の手順で作成したパスワードの値を設定してください。

    <java classname="Launcher" 
          classpathref="java.sdk.classpath" fork="true">         
        <sysproperty key="javax.net.ssl.keyStore"
                     value="/insert/your/path/java-keystore.jks" />
        <sysproperty key="javax.net.ssl.keyStorePassword" 
                     value="insert_your_password" />
    </java>
    

コマンドラインからサンプルを実行する

Mavenを使ってサンプルをビルドして実行します(mvn)。

  1. コマンドラインターミナルで<alexa-skills-kit-folder>/samplesに移動します。このフォルダーには、以前に編集したpom.xmlファイルが含まれています。
  2. 以下のMavenコマンドで、サンプルをビルドします。

mvn assembly:assembly -DdescriptorId=jar-with-dependencies package

  1. サンプルが正常にビルドされたら、以下のMavenコマンドでサンプルを実行します。

mvn exec:java -Dexec.executable=â??javaâ?? -DdisableRequestSignatureCheck=true

サンプルによって、Launcherクラスでサーバーが起動されます。その後、コマンドラインユーティリティのcURLを使用して、HTTPSリクエストをサンプルに送信し、サンプルの動作をテストします。サンプルを実行するMavenコマンドには、disableRequestSignatureフラグが含まれていることに注意してください。これは、Javaライブラリに含まれるSpeechletServletがAlexaによって署名されたHTTPSリクエストしか受け入れないためです。disableRequestSignatureフラグは、この署名の検証を一時的に無効化します。

cURLを使用してリクエストを送信するには、新しいターミナルウィンドウを開いてhttps://localhost:8888/helloにJSON形式にフォーマットされたリクエストを送信してください。例(分かりやすいようにJSONを複数行に分けて記述しています):

curl -v -k https://localhost:8888/hello --data-binary  '{
  "version": "1.0",
  "session": {
    "new": true,
    "sessionId": "session1234",
    "application": {
      "applicationId": "amzn1.echo-sdk-ams.app.1234"
    },
    "attributes": {},
    "user": {
      "userId": null
    }
  },
  "request": {
    "type": "LaunchRequest",
    "requestId": "request5678",
    "timestamp": "2015-05-13T12:34:56Z"
  }
}'

起動リクエストのJSON構文の詳細については、カスタムスキル用JSONインターフェースリファレンスを参照してください。

Hello Worldのサンプルでは、すべてのリクエストに対して、Alexaが音声で応答するテキストとAlexaアプリに表示されるカードを含む単純な応答を生成します。この応答の本文はJSON形式で、以下のように記述されます。

{
  "version": "1.0",
  "response": {
    "outputSpeech": {
      "type": "PlainText",
      "text": "Welcome to the Alexa Skills Kit, you can say hello"
    },
    "card": {
      "type": "Simple",
      "title": "HelloWorld",
      "content": "Welcome to the Alexa Skills Kit, you can say hello"
    },
    "reprompt": {
      "outputSpeech": {
 "type": "PlainText",
 "text": "Welcome to the Alexa Skills Kit, you can say hello"
      }
    },
    "shouldEndSession": false
  },
  "sessionAttributes": {}
}

Elastic BeanstalkでHello Worldをセットアップする

サービスシミュレーターまたはAlexa搭載端末を使用してスキルをテストするには、インターネットでアクセス可能なエンドポイントでAlexaスキル用のウェブサービスをホストする必要があります。これを実現するには、さまざまな方法があります。その1つに、AWS Elastic BeanstalkAmazon Web Servicesで提供されるサービスの1つ)でスキルをホストする方法があります。ここからは、Elastic Beanstalk上でHello Worldサンプルをセットアップする手順を説明します。

AWS Elastic BeanstalkにHello Worldをデプロイするには、前述のJavaの要件に加えて以下のツールが必要となります。

これらの手順では、<alexa-skills-kit-folder>が、GitHubリポジトリからクローン作成したフォルダーになります。

Elastic Beanstalkにサンプルをデプロイするには、以下の手順を実行してください。

  1. amzn/alexa-skills-kit-java GitHubリポジトリをダウンロードするか、クローンを作成します。
  2. 既存のAWSアカウントを持っていない場合は、Amazon Web Servicesにアクセスしてアカウントを新規作成します。
  3. AWS Toolkit for Eclipseをインストールします。
  4. アカウントの認証情報を使用して、AWS Toolkit for Eclipseをコンフィギュレーションします。 a. AWSコンソールにログインし、Identity and Access Management(IAM)に移動します。 b. 新しいIAMユーザーを作成し、Elastic Beanstalkへのフルアクセスの権限を付与します。 c. 新しいユーザーのアクセスキーを生成するオプションを選択します。これらの認証情報のダウンロードを選択します。 d. Eclipseで、「Window」をクリックし、「Preferences」をクリックします。「AWS Toolkit」セクションで、アクセスキーのIDシークレットアクセスキーを入力します。

  5. 一度Mavenを実行して、Alexa Skills KitのJavaライブラリ(alexa-skills-kit-x.x.jar)をローカルリポジトリに追加します。 a. コマンドラインで、<alexa-skills-kit-folder>/samplesに移動します。 b. 次のコマンドを実行します。mvn install

    これにより、コンパイルされたjarファイルが<alexa-skills-kit-folder>/repoからローカルのMavenリポジトリにコピーされ、後でサンプルをビルドするときに利用できるようになります。

  6. maven-archetype-webappアーキタイプを使用してMavenプロジェクトを新規作成し、サンプルコードをインポートします。「Mavenウェブアプリプロジェクトを作成してコードをインポートする」を参照してください。
  7. HelloWorldSpeechletをホストするようSpeechletServletを拡張するクラスを追加し、web.xmlでサーブレットマッピングをセットアップします。「SpeechletServletを追加してサーブレットマッピングをセットアップする」を参照してください。
  8. プロジェクトをElastic Beanstalkにデプロイします。「サンプルをElastic Beanstalkにデプロイする」を参照してください。
  9. HTTPSを使用するよう新しいElastic Beanstalk環境をコンフィギュレーションします。「HTTPSを使用するようElastic Beanstalk環境をコンフィギュレーションする」を参照してください。
  10. 開発者ポータルでサンプルを登録します。「開発者ポータルでサンプルを登録する」を参照してください。
  11. 開発者ポータル上でサービスシミュレーターまたは開発者ポータルアカウントに登録したAlexa搭載端末を使用してスキルをテストします。「サンプルをテストする」を参照してください。

Mavenウェブアプリプロジェクトを作成してコードをインポートする

Mavenのmaven-archetype-webappアーキタイプは、ウェブアプリとして構成され、Mavenを使用してビルドするためにセットアップされたプロジェクトを新規作成します。

プロジェクトをセットアップする際、ファイルとフォルダーをファイルシステムからEclipseにドラッグできます。プロンプトが出たら、ファイルをプロジェクトにコピーするオプションを選択します。

  1. Eclipseでは、「File」、「New」、「Maven Project」の順にクリックします。
    • このオプションが選べない場合は、「File」、「New」、「Project」を選択し、「Maven」を展開して「Maven Project」オプションを選択します。
    • プロジェクトの新規作成のダイアログボックスに「Maven」が表示されない場合は、EclipseのバージョンにMaven Integration for Eclipseが含まれていることを確認してください。
  2. プロジェクトの場所を選択します。「Create simple project」オプションが選択されていないことを確認してください。
  3. アーキタイプを選択するプロンプトが出たら、maven-archetype-webappを選択します。アーキタイプのリストは長いため、「webapp」と入力してフィルタリングすることをお勧めします。
  4. プロジェクトのグループIDアーティファクトIDを入力します。たとえば、これらのフィールドの両方にalexa-skills-kit-samplesを指定することもできます。

これにより、新規の空のプロジェクトが作成され、ウェブアプリとしてセットアップされます。その後、サンプルソースコードと依存関係を追加する必要があります。

  1. プロジェクトには、src/mainフォルダーが必要です。mainjavaフォルダーがない場合は、javaという名前のフォルダーを新規に作成してください。最終的には、src/main/javaのようになります。
  2. helloworldフォルダーを<alexa-skills-kit-folder>/samples/src/main/javaから、新規プロジェクトのsrc/main/javaフォルダーにコピーします。
    • これを行うには、「Copy files and folders」オプションを選択してhelloworldをEclipseにドラッグするか、ファイルシステムでフォルダーをコピーします。
    • これで、プロジェクトには、2つのクラス(HelloWorldSpeechletおよびHelloWorldSpeechletRequestStreamHandler)を含む、helloworldという1つのパッケージが含まれているはずです。2つ目のクラスはLambda用なので、この例では使用しません。
  3. <alexa-skills-kit-folder>/samples/pom.xmlファイルをMavenプロジェクトのルートにコピーし、プロジェクト作成時に生成されたpom.xmlを置換します。サンプルで提供されるpom.xmlでは、サンプルのビルドに必要なすべての依存関係がすでにセットアップされています。ただし、この依存関係はWARではなくJARファイルをビルドするためにセットアップされたものです。
  4. pom.xmlファイルを編集して以下の変更を行います。
    • <packaging>の設定をwarに変更します。
    • <build>の下に、次の行を追加します。 <finalName>alexa-skills-kit-samples</finalName>
  5. プロジェクトを右クリックし、「Maven」、「Update Project」の順にクリックします。

SpeechletServletを追加してサーブレットマッピングをセットアップする

Javaライブラリには、SpeechletServletクラスが含まれます。このクラスは、HTTPリクエスト本文のシリアライズおよびデシリアライズを処理してSpeechletの適切なメソッド(onLaunch()onIntentなど)をリクエストに応じて呼び出すJava EEサーブレットを実装します。

Elastic Beanstalk上でウェブサービスをホストするには、このクラスを拡張し、サンプル(HelloWorldSpeechlet)内に適切なSpeechletクラスをインスタンス化するコンストラクターを追加する必要があります。その後、プロジェクトのweb.xmlファイルでサーブレットマッピングをセットアップします。

SpeechletServletを作成するには、以下の手順を実行します。

  1. helloworldパッケージで、com.amazon.speech.speechlet.servlet.SpeechletServletを拡張するクラスを新規作成します。この例では、新しいクラスにHelloWorldServletという名前を付けています。
  2. setSpeechlet()を呼び出すことで、HelloWorldSpeechletをインスタンス化する新しいクラスのデフォルトコンストラクターを実装します。

HelloWorldServletクラスは、以下のようになります。

package helloworld;

import com.amazon.speech.speechlet.servlet.SpeechletServlet;

public class HelloWorldServlet extends SpeechletServlet {

  public HelloWorldServlet() {
    this.setSpeechlet(new HelloWorldSpeechlet());
  }
}

サーブレットマッピングをセットアップするには、以下の手順を実行します。

  1. プロジェクトでsrc/main/webapp/WEB-INF/web.xmlファイルを開きます。
  2. <servlet>タグと<servlet-mapping>タグを追加して、サーブレットクラスを識別し、クラスをURLにマッピングします。

<servlet>セクションと<servlet-mapping>セクションは、以下のようになります。

<servlet>
  <servlet-name>HelloWorldServlet</servlet-name>
  <servlet-class>helloworld.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>HelloWorldServlet</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>

これらの更新がすべて完了したら、すべてのファイルを保存し、プロジェクトを右クリックして「Maven」をクリックし、「Update Project」をクリックします。

この時点で、プロジェクトのセットアップは完了です。ビルドがすべて正常に行われるかを確認するためにビルドしてみます。プロジェクトを右クリックし、「Run As」、「Maven install」の順にクリックします。プロジェクトのtargetフォルダーにwarファイルが作成されていることを確認します。

サンプルをElastic Beanstalkにデプロイする

AWS Toolkit for Eclipseを使用している場合は、Eclipseから直接ウェブプロジェクトをデプロイできます。最初のデプロイで、アプリ環境が新規作成されます。環境はウェブサービスの特定のバージョンを表し、AWSリソース上にデプロイされます。環境名は、ウェブサービスのエンドポイントを判断するのに使用されます。詳細については、「Elastic Beanstalkの構成要素」を参照してください。

ウェブサービスがデプロイされたら、Eclipseでコードを変更して同じ環境に再デプロイできるようになります。これにより、ウェブサービスの新しいバージョンに環境が更新されます。

AWSの価格: Elastic Beanstalkの使用に追加の費用はかかりません。実際にアプリケーションで利用するAWSリソース(EC2など)についてのみ支払いが発生します。EC2の利用価格は地域によって異なります。詳細については、料金 - Amazon EC2 | AWSを参照してください。

Hello WorldサンプルをElastic Beanstalkにデプロイするには、以下の手順を実行します。

  1. Mavenを使用して、プロジェクトのwarファイルをビルドします。プロジェクトを右クリックし、「Run As」、「Maven install」の順にクリックします。プロジェクトのtargetフォルダーにwarファイルが作成されていることを確認します。
  2. Eclipseのプロジェクトエクスプローラーで、プロジェクトを右クリックし、「Amazon Web Services」、「Deploy to AWS Elastic Beanstalk」の順にクリックします。
  3. Manually define a new server」オプションを選択します。
  4. server type」には、「AWS Elastic Beanstalk for Tomcat 8」を選択し、「Next」をクリックします。
  5. Region」で、アプリケーションをデプロイするリージョンを選択します。

    注: Alexaからのすべての呼び出しは、「US East (N. Virginia)」AWSリージョンから送信されます。そのため、パフォーマンス向上とコスト削減のためには、Elastic Beanstalk環境でUS East (N. Virginia)リージョンに作成することをお勧めします。

  6. Application Name」と「Environment Name」に入力して、「Finish」をクリックします。

Elastic Beanstalkへのアプリケーションのデプロイには、数分かかることがあります。

ここまでで、ブラウザで環境に接続できるようになりました。ただし、HTTPSを使用するように環境をコンフィギュレーションするまでは、サービスでAlexaからのリクエストを受けることができません。

HTTPSを使用するようElastic Beanstalk環境をコンフィギュレーションする

Alexaのセキュリティ要件を満たすには、ウェブサービスのエンドポイントで有効なSSL証明書を提示する必要があります。Elastic Beanstalkのテスト時には、自己署名証明書を使用できます。署名済み証明書を提示するように、Elastic Beanstalk環境をコンフィギュレーションする必要があります。

サーバー証明書として証明書をアップロードし、HTTPSを使用するようにElastic Beanstalk環境のロードバランサーをコンフィギュレーションします。

  1. 秘密鍵自己署名証明書を作成します。
    • 詳細な手順については、「カスタムスキルをテストする」を参照してください。証明書作成時に新しいElastic Beanstalkエンドポイントのドメイン名を必ず指定してください。
    • .pemファイルの証明書と秘密鍵をメモしておきます。
  2. AWSコマンドラインインターフェースのインストールとコンフィギュレーションがまだの場合は、ここで実施します。

  3. 以下のAWSコマンドを使用して、自己署名証明書をサーバー証明書としてAWSにアップロードします。

     aws iam upload-server-certificate \
       --server-certificate-name CertificateName \
       --certificate-body file://path/to/certificate.pem \
       --private-key file://path/to/private-key.pem
    
    • server-certificate-nameに、AWSの証明書を識別する名前を指定します。
    • certificate-bodyに、証明書の.pemファイルのパスと名前を指定します。
    • private-keyに、秘密鍵の.pemファイルのパスと名前を指定します。
  4. AWSマネジメントコンソールにログインします。Elastic Beanstalkにアクセスし、新しい環境に移動します。
  5. 左側のメニューで、「コンフィギュレーション(Configuration)」をクリックし、「負荷分散(Load Balancing)」セクションを開きます。
  6. 以下の変更を加えます。

    • Secure listener」ポートを443に設定します。
    • Protocol」をHTTPSに設定します。
    • SSL Certificate ID」ドロップダウンリストから、手順3でアップロードしたサーバー証明書の名前を選択します。
  7. 変更を保存します。Elastic Beanstalkで環境が自動的に更新されます。
  8. ブラウザから、https://プロトコルを使用して環境のURLに接続できることを確認します。

開発者ポータルでサンプルを登録する

最後に、開発者ポータルでサンプルを登録する必要があります。これで、サンプルをテストできるようになりました。登録のフィールドをすべて入力する必要はありません。テストのために最低限入力する必要があるのは、以下のフィールドです。

  • スキルの基本情報(Skill Information): Skill Type(カスタム対話モデル)、NameInvocation Name
  • Interaction Model: Intent SchemaSample UtterancesCustom Slot Types
  • Configuration: EndpointHTTPS」オプションを選択して、サービスのエンドポイントのURLを入力します。
  • SSL証明書(SSL Certificate): いずれか1つのオプションを選択します。テスト用に自己署名のSSL証明書を使用する場合は、証明書を作成して開発者ポータルにアップロードします。
  • Test: 「Enabled」に設定します。

スキルの登録手順については、「開発者ポータルでカスタムスキルを登録および管理する」を参照してください。以下の表の値を使用します。

設定
Name 任意の有効なスキル名。
Invocation Name 任意の有効な呼び出し名。たとえば、「greeter」などを使用できます。
対話モデル(Interaction Model) 各サンプルには、サンプルの対話モデルを含むspeechAssetsフォルダーがあります。JSONをIntentSchema.jsonから「インテントスキーマ(Intent Schema)」ボックスにコピーし、テキストをSampleUtterances.txtから「サンプル発話(Sample Utterances)」ボックスにコピーします。

サンプルスキル内でのこれらの使用方法の詳細については、「Alexa Skills Kitサンプルを使用する(カスタムスキル)」を参照してください。
Endpoint HTTPSオプションを選択し、Elastic Beanstalk環境で定義したエンドポイントを入力します。サーブレットマッピングで設定した<url-pattern>のフルパスを必ず指定してください。

たとえば、<url-pattern>/helloでElastic Beanstalk環境のエンドポイントがhttps://myhelloworldskill.elasticbeanstalk.comの場合、「エンドポイント(Endpoint)」には次のように指定します。

https://myhelloworldskill.elasticbeanstalk.com/hello
SSL証明書(SSL Certificate) I will upload a self-signed certificate」オプションを選択します。次に、テキストエディターであらかじめ生成していた証明書を開き、すべての内容をテキストボックスにコピーします。

サンプルをテストする

サンプルをElastic Beanstalkにデプロイし、HTTPSのコンフィギュレーションを完了し、開発者ポータルに登録したら、スキルと対話するためのフレーズのいずれかを言うことでスキルを呼び出すことができるはずです。

  • 「Alexa、<invocation name><command>を開始して」
  • 「Alexa、<invocation name><command>に伝えて」
  • 「Alexa、<invocation name>に話して」

サポートされているフレーズのリストについては、会話を始めるためのサポート済みフレーズを参照してください。提供されているサンプルと実行可能なインテントの詳細については、Alexa Skills Kitサンプルを使用する(カスタムスキル)を参照してください。

さまざまな変更を試してみる場合は、プロジェクトでコードを変更してからコードをElastic Beanstalkに再デプロイします。同じElastic Beanstalk環境に再デプロイできます。

  1. Eclipseのプロジェクトエクスプローラーで、プロジェクトを右クリックし、「Amazon Web Services」、「Deploy to AWS Elastic Beanstalk」の順にクリックします。
  2. Run On Server」ダイアログボックスで、「Choose an Existing Server」を選択し、ウェブサービスをデプロイする既存の環境を選択して「Finish」をクリックします。

ログファイルにアクセスする

ログファイルは、デバッグやトラブルシューティングの際に非常に有効です。ここで説明するElastic Beanstalkコンフィギュレーションのセットアップでは、ウェブサービスのログファイルに3つの方法でアクセスできます。

  1. AWSコンソールからログファイルのスナップショットを確認します。このスナップショットには、各ログファイルからの最新の100行が、1回の表示またはダウンロードに含まれます。
  2. AWSコンソールからすべてのログをダウンロードします。
  3. Beanstalk 環境を、自動的にログをAWS S3バケットにパブリッシュするようにコンフィギュレーションします。

これらのオプションの詳細については、ログファイルの利用方法を参照してください。

提供されるサンプルは、ログ作成にSLF4Jおよびlog4jを使用しています。デフォルトでは、コンソールターミナルにログメッセージを書き込みます。Elastic Beanstalk環境で保存されるログファイルにログメッセージを書き込むには、log4j.propertiesコンフィギュレーションファイルを使用してログ作成ツールを設定する必要があります。このファイルをJavaのウェブプロジェクトのJava Resources\srcディレクトリに追加します。

たとえば、以下のlog4j.propertiesファイルは、/var/log/tomcat8/helloworld.logと呼ばれるファイルにログエントリーを書き込むよう、ログ作成ツールをコンフィギュレーションします。

log4j.logger.helloworld=info
log4j.rootLogger=info, tail

log4j.appender.tail=org.apache.log4j.FileAppender
log4j.appender.tail.File=${catalina.base}/logs/helloworld.log
log4j.appender.tail.layout=org.apache.log4j.PatternLayout
log4j.appender.tail.layout.ConversionPattern=%d: %-5p %c{1} - %m%n

ログ作成をコンフィギュレーションする方法の詳細については、SLF4Jおよびlog4jを参照してください。

HelloWorldSpeechletでは、サービスが受け取るリクエストの種類ごとにログエントリーを書き込みます。

private static final Logger log = LoggerFactory.getLogger(HelloWorldSpeechlet.class);
...

@Override
public SpeechletResponse onLaunch(final LaunchRequest request, final Session session)
      throws SpeechletException {
    log.info("onLaunch requestId={}, sessionId={}", request.getRequestId(),
     session.getSessionId());
    ...
}

上のコンフィギュレーションを使用してHello Worldを起動すると、以下のようなログエントリーが生成されます(Elastic Beanstalkに最新の100行のログのスナップショットが表示されたのと同じです)。

-------------------------------------
/var/log/tomcat8/helloworld.log
-------------------------------------
2015-03-27 18:06:48,976: INFO  HelloWorldSpeechlet - onSessionStarted requestId=amzn1.echo-api.request.affeb267-c275-4f43-91ed-620fce5851ab, sessionId=amzn1.echo-api.session.8767a9df-45b2-4525-a376-5b3c8ba3f715
2015-03-27 18:06:49,087: INFO  HelloWorldSpeechlet - onLaunch requestId=amzn1.echo-api.request.affeb267-c275-4f43-91ed-620fce5851ab, sessionId=amzn1.echo-api.session.8767a9df-45b2-4525-a376-5b3c8ba3f715

次のステップ