開発者コンソール

手順6: Lambdaパッケージを作成・デプロイする


手順6: Lambdaパッケージを作成・デプロイする

Fire TV対応アプリをアップロードできたので、次はAlexaから受け取ったディレクティブをアプリに渡す機能を追加するため、Lambda関数を作成する必要があります。ここでは、ビデオスキルを実装するための土台として使用できるサンプルLambda関数が用意されています。このサンプルLambda関数は、Alexaから受け取ったディレクティブに応答し、ADM経由でFire TV対応アプリと通信します。

Lambdaについて

この手順では、Lambdaを使用して作業を開始します。このドキュメントには、Fire TV対応アプリでVSKを統合する際に使用するLambda関数のサンプルコードが含まれています。このコードには、Discovery、SearchAndPlay、FastForward、ChangeChannelなどのディレクティブに対するレスポンスが含まれています。このindex.jsコードを基にして、独自のロジックを追加することができます。

このLambda関数では、クライアントシークレットとクライアントIDを実際の値で更新する必要があります。Node.jsアプリを使用して、関数をLambdaデプロイパッケージ(zipファイル)として生成し、AWS Lambdaにアップロードします。後ほど、受信したディレクティブを処理してアプリに渡すロジックを記述し、この関数をカスタマイズします。

Lambda関数のロジックをカスタマイズする際は、Node.jsをある程度理解していると役立ちますが、この段階ではNode.jsの専門的な知識は必要ありません(Lambda関数はその他のさまざまな言語でコーディングすることもできます)。このサンプルLambda関数では、Node.jsバージョン10以降を使用していることは確認してください。Node.jsとNPMが既にインストールされているかどうかを確認するには、node -vおよびnpm -vと入力します。Node.jsとNPMがインストールされていない場合は、インストールします。Lambda関数で想定されるAlexaディレクティブを処理する方法の詳細については、Alexaディレクティブを解釈して応答するを参照してください。

サンプルLambda関数のダウンロード

Fire TV対応のサンプルLambda関数は以下からダウンロード可能です。

このプロジェクトには、サンプルLambda関数のファイル(index.js)のほかに、Lambdaコードをデプロイパッケージとして生成するために必要なNode.jsモジュールをダウンロードするNode.jsパッケージファイルが含まれています。zipファイルのダウンロードが完了したら解凍します。

Lambda関数のクライアントIDとクライアントシークレットの更新

まず、Lambda関数のサンプルコードでクライアントIDとクライアントシークレットを更新する必要があります。

  1. firetv-lambdaフォルダに移動し、index.jsをテキストエディターで開きます。
  2. アプリに署名してセキュリティプロファイルを構成するで取得したCLIENT_IDCLIENT_SECRETの値を入力します。

    const CLIENT_ID = '<クライアントIDを入力>';
    const CLIENT_SECRET = '<クライアントシークレットを入力>';
    
  3. ターミナルウィンドウまたはコマンドプロンプトを開き、firetv-lambdaアプリが含まれているディレクトリに移動します。次に例を示します。

    cd /Users/<ユーザー名>/skills/firetv-lambda/
    
  4. 次のコマンドを実行します。

    npm install
    

    node_modulesというフォルダがない場合は作成され、そこにすべての依存パッケージが保存されます(このコマンドの実行時に警告が表示されても問題ありません)。

Lambdaデプロイパッケージの作成

Lambda関数をカスタマイズし、Node.jsモジュールをインストールしたら、Lambdaデプロイパッケージを生成します。

  1. Lambdaコードが含まれているディレクトリに移動します。
  2. 次のコマンドを実行して、Lambdaデプロイパッケージを作成します。

    zip -r firetv-lambda.zip .
    

    これにより、すべてのLambdaコードをパッケージ化したzipファイルが作成されます(Windowsの場合は、Windowsエクスプローラーでフォルダを右クリックし、[送る] > [圧縮(zip形式)フォルダー] を選択して作成することもできます)。

    これで、このディレクトリにfiretv-lambda.zipというパッケージが作成されました。このパッケージは、以降のセクションで(IAMロールの作成後に)AWS Lambdaにアップロードします。

Lambda用IAMロールの作成

まず、Lambda関数を呼び出せるアプリを指定するためのアクセス権限を定義する必要があります。ここでは、Lambda関数がCloudWatchなどのAWSサービスを呼び出すことを許可するIAMロールを作成します。以下の手順に従って、IAMロールを作成します。

  1. AWSマネジメントコンソールにログインします。
  2. [サービス] をクリックし、[IAM] に移動します(検索ボックスを使用してください)。
  3. 左側のナビゲーションから [ロール] を選択し、[ロールの作成] をクリックします。
  4. [AWSサービス](デフォルトで選択済み)で、[Lambda] をクリックし、下部の [次のステップ: アクセス権限] をクリックします。
  5. AWSLambdaBasicExecutionRole」を検索し、その横にあるチェックボックスをオンにします。[次のステップ: タグ] をクリックします。
  6. 「タグの追加(オプション)」構成をスキップし、[次のステップ: 確認] をクリックします。
  7. ロールに名前を付け(「video_skill_streamz」など)、必要に応じて説明を入力し、[ロールの作成] をクリックします。

    Lambdaとやり取り可能なIAMロールの作成
    Lambdaとやり取り可能なIAMロールの作成

    IAMロール名を記録して、以下の手順ですぐに使用できるようにしてください(特にAWSで複数のIAMロールを作成済みの場合)。

ビデオスキルのLambda関数をAWSで作成する方法

次に、ビデオスキルで使用するLambda関数をAWSで作成します。以下の手順に従って、ビデオスキルのLambda関数を作成します。

  1. AWSマネジメントコンソールにログインします。
  2. [サービス] をクリックし、[Lambda] に移動します(検索ボックスを使用してください)。
  3. AWSリージョンとビデオスキルにある表に基づいて、画面右上で適切なAWSリージョンを選択します(IAMとは異なり、Lambda関数はAWSリージョンに固有です)。

    AWSリージョンの選択
    AWSリージョンの選択

    ユーザーの居住地に近いリージョンを選択すると、発話からLambda呼び出しまでのレイテンシを最小限に抑えることができます。また、間違ったAWSリージョンを選択すると、ビデオスキルが機能しなくなります。

  4. [関数の作成] をクリックします。
  5. [一から作成] を選択したままにして、以下のように設定します。
    • [関数名]: 一意の名前にします(例:firetv_app_lambda)。
    • [ランタイム][Node.js 10.x](Lambda関数のサンプルコードはNode.jsで記述されています。本番ではPythonやRuby、.NET、Javaなどの言語も使用可能です)。
    • [アクセス権限]
      • [実行ロール][既存のロールを使用する]
      • [既存のロール]: 前のセクション(Lambda用IAMロールの作成)で作成したIAMロールを選択します。
      AWSでの基本的なLambda関数の作成
      AWSでの基本的なLambda関数の作成
  6. [関数の作成] をクリックします。

    Lambda関数が作成されます。Lambda関数がAlexaからディレクティブを受信するようにするには、メッセージの取得場所を通知するスマートホーム用トリガーを追加する必要があります(このトリガーとして、クラウド上でデバイスとLambdaコンピューティングをつなげる役目を果たすのが、スマートホームAPIです)。

  7. [+トリガーを追加] をクリックします。
  8. [トリガーの設定][Alexa Smart Home] を選択し、(手順1: ビデオスキルを作成してデバイスをセットアップするで作成した)ビデオスキルIDを [アプリケーションID] フィールドに入力します。[追加] をクリックします。

    ビデオスキルIDを使用したLambdaの構成
    ビデオスキルIDを使用したLambdaの構成

    [追加] をクリックすると、上部に「トリガー<123456789>が関数<Lambda関数名>に正常に追加されました。関数は現在、トリガーからのイベントを受信しています」という成功の通知が表示されます。 この場合、Lambda関数のトリガーはビデオスキルです。

  9. 以下のスクリーンショットが示すように、Lambda関数のARNが画面右上に表示されるので、コピーして記録します。この情報は、この後の手順でビデオスキルを更新するときに必要になります。

    Lambda関数用ARNの表示場所
    Lambda関数用ARNの表示場所
  10. ページ中央に表示されるLambda関数の名前(Lambdaアイコンがあるボックス)をクリックします。下のペインに [関数コード] セクションが表示されます。
  11. [関数コード] セクションで、[コードエントリタイプ] メニューをクリックし、[.zipファイルをアップロード] を選択します。
  12. [アップロード] をクリックし、Node.jsで既に作成したfiretv-lambda.zipファイル(Lambdaデプロイパッケージの作成を参照)を選択します。
  13. [保存] をクリックします。

Lambda関数の詳細

Alexaはユーザーの発話(例:『インターステラー』を再生して)をリッスンし、そのリクエストをJSON形式のディレクティブとしてパッケージ化する、ということを覚えておいてください。Lambda関数は、Alexaから送信されたディレクティブを受信してアクションを実行します。Lambda関数は、ディレクティブのメッセージヘッダーにある名前空間と名前の値によって、リクエストの種類を判断します。たとえば、名前空間はリクエストがDiscoverディレクティブであるか、またはChangeChannelディレクティブであるかを指定するので、これに応じてhandleDiscoveryまたはhandleChannelControl関数が呼び出されます。

サンプルLambda関数は、ディレクティブの基本的な処理を提供します。Lambda関数のコードをカスタマイズするには、スキルに対するあらゆる種類のユーザーリクエストを処理し、アプリによる適切なレスポンスをAmazon Device Messaging(ADM)経由で提供する必要があります。チュートリアルの後半では、ビデオスキルでさまざまなディレクティブを処理する方法をテストします。

次のステップ

次の 手順7: Fire TVスキルのセクションを更新するに進みます。

問題が発生して続行できない場合は、トラブルシューティングを参照してください。