手順6: Lambdaパッケージを作成・デプロイする
Fire TV対応アプリをアップロードできたので、次はAlexaから受け取ったディレクティブをアプリに渡すことができるLambda関数を作成する必要があります。ここでは、ビデオスキルを実装するための土台として使用できるサンプルLambda関数が用意されています。このサンプルLambda関数は、Alexaから受け取ったディレクティブに応答し、ADM経由でFire TV対応アプリと通信します。
- Lambdaについて
- サンプルLambda関数のダウンロード
- Lambda関数のクライアントIDとクライアントシークレットの更新
- Lambdaデプロイパッケージの作成
- Lambda用IAMロールの作成
- ビデオスキルのLambda関数をAWSで作成する方法
- Lambda関数の詳細
- 次のステップ
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以降を使用する必要があります。想定されるAlexaディレクティブをLambda関数で処理する方法の詳細については、Alexaディレクティブを解釈して応答するを参照してください。
サンプルLambda関数のダウンロード
Fire TV対応のサンプルLambda関数は、sample-fire-tv-app-video-skill GitHubリポジトリのLambdaフォルダにあります。このフォルダは、手順2のVSKを統合したFire TV対応サンプルアプリのダウンロードでサンプルアプリをダウンロードしたときに作成されたものです。
このLambdaフォルダには、サンプルLambda関数のindex.js
ファイルのほかに、package.json
ファイルが含まれています。後者は、Lambdaコードをデプロイパッケージとして生成するために必要なNodeモジュールのダウンロードに使用するファイルです。このフォルダには、ビデオコンテンツのデータソースの例であるvideo_catalog.json
も含まれています。
Lambda関数のクライアントIDとクライアントシークレットの更新
まず、Lambda関数のサンプルコードでクライアントIDとクライアントシークレットを更新する必要があります。
- Node.jsとnpmのバージョン10以降がインストールされていることを確認します。Node.jsがインストールされているかどうかを確認するには、「
node -v
」と入力します。npmがインストールされているかどうかを確認するには、「npm -v
」と入力します。まだインストールしていない場合は、Node.jsをダウンロードしてインストールしてください(Node.jsのインストールにはnpmが含まれるため、npmを個別にインストールする必要はありません)。 Lambda
フォルダに移動し、テキストエディターでindex.js
を開きます。-
アプリに署名してセキュリティプロファイル構成するで取得した
CLIENT_ID
とCLIENT_SECRET
の値を入力します。32~33行目:
const CLIENT_ID = '<クライアントIDを入力>'; const CLIENT_SECRET = '<クライアントシークレットを入力>';
-
ターミナルウィンドウまたはコマンドプロンプトを開き、
Lambda
アプリが含まれているディレクトリに移動します。次に例を示します。cd /Users/<ユーザー名>/sample-fire-tv-app-video-skill/Lambda
-
次のコマンドを実行します。
npm install
node_modules
という名前のフォルダが作成され、そこにすべての依存パッケージが保存されます。package-lock.json
も追加され、次のような成功メッセージが表示されます。added 69 packages from 127 contributors and audited 89 packages in 5.483s found 0 vulnerabilities
Lambdaデプロイパッケージの作成
Lambda関数をカスタマイズし、Node.jsモジュールをインストールしたら、次の手順に従ってLambdaデプロイパッケージを生成します。
- Lambdaコード
index.js
が含まれているディレクトリに移動します。 -
次のコマンドを実行して、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ロールを作成します。
- AWSマネジメントコンソールにサインインします(以前と同じAmazon開発者アカウントを使用する必要はありません)。
- 上部ナビゲーションバーの [サービス] をクリックし、「IAM」を検索します。検索結果に表示される [IAM] をクリックしてください。
- 左側のナビゲーションから [ロール] を選択し、[ロールの作成] ボタンをクリックします。
- [AWSサービス] ボックス(デフォルトで選択済み)の下にある [Lambda] をクリックし、下部の [次のステップ: アクセス権限] ボタンをクリックします。
- 「AWSLambdaBasicExecutionRole」を検索し、その横にあるチェックボックスをオンにします。次に、[次のステップ: タグ] ボタンをクリックします。
- 「タグの追加(オプション)」構成をスキップし、[次のステップ: 確認] ボタンをクリックします。
-
ロール名を入力して(「video_skill_streamz」など)、必要に応じて説明を入力し、[ロールの作成] ボタンをクリックします。
IAMロール名を記録して、以下の手順ですぐに使用できるようにしてください(特にAWSで複数のIAMロールを作成済みの場合)。
ビデオスキルのLambda関数をAWSで作成する方法
次に、ビデオスキルで使用するLambda関数をAWSで作成します。以下の手順に従って、ビデオスキルのLambda関数を作成します。
- AWSマネジメントコンソールにログインします。
- [サービス] をクリックし、[Lambda] に移動します(検索ボックスを使用)。
-
以下の表に基づいて、画面右上のドロップダウンリストから適切なAWSリージョンを選択します (IAMとは異なり、Lambda関数はAWSリージョンに固有です)。
ロケール ユーザーのリージョン AWSリージョン en-US、en-CA、fr-CA、pt-BR、es-MX 北米 米国東部(バージニア北部) en-GB、fr-FR、de-DE、it-IT、es-ES、en-IN、hi-IN 欧州 欧州(アイルランド) ja-JP、en-AU 極東(FE) 米国西部(オレゴン) (ロケールの省略形では、小文字は言語を示し、大文字は地域を示します。たとえば、「fr-CA」はカナダのフランス語圏を意味し、「en-CA」はカナダの英語圏を意味します。)
ユーザーの居住地に近いリージョンを選択すると、発話からLambda呼び出しまでのレイテンシを最小限に抑えることができます。また、間違ったAWSリージョンを選択すると、ビデオスキルが機能しなくなります。
注: 上記ロケールの一部では、今後Alexaがビデオスキル対応となる予定です。詳細については、サポート対象国を参照してください。 - [関数の作成] ボタンをクリックします。
- [一から作成] ボックスを選択した状態で、以下のように設定します。
- [関数名]: 一意の名前にします(例:
firetv_app_lambda
)。 - [ランタイム]: [Node.js 10.x](Lambda関数のサンプルコードはNode.jsで記述されています。本番ではPython、Ruby、.NET、Javaなどの言語も使用可能です)。
- [アクセス権限]:[実行ロールの選択または作成] をクリックして、このセクションを展開します。次のように設定します。
- [実行ロール]: [既存のロールを使用する]
- [既存のロール]: 前のセクション(Lambda用IAMロールの作成)で作成したIAMロールを選択します。
ヒント: 今後の手順で必要になるため、Lambda関数名を記録しておくことをお勧めします。
- [関数名]: 一意の名前にします(例:
-
[関数の作成] ボタンをクリックします。
Lambda関数が作成されます。Lambda関数がAlexaからディレクティブを受信するためには、メッセージの取得場所を通知するスマートホーム用トリガーを追加する必要があります(このトリガーとして、デバイス(Echo Dotなど)とクラウドのLambdaコンピューティングをつなげる役目を果たすのが、スマートホームAPIです)。
- [+トリガーを追加] ボタンをクリックします。
-
[トリガーの設定] で [Alexa Smart Home] を選択し、手順1: ビデオスキルを作成してデバイスをセットアップするで作成したビデオスキルIDを [アプリケーションID] フィールドに入力します。次に、[追加] ボタンをクリックします。
[追加] をクリックすると、上部に「トリガー<123456789...>が関数<Lambda関数名>に正常に追加されました。関数は現在、トリガーからのイベントを受信しています」という成功の通知が表示されます。 この場合、Lambda関数のトリガーはビデオスキルです。ビデオスキルによって、このLambda関数が呼び出されます。
注: Lambda関数で「バージョニング」を使用している場合は、新バージョンの作成ごとにスマートホーム用トリガーを追加し直す必要があります。 -
以下のスクリーンショットが示すように、Lambda関数のARNが画面右上に表示されるので、コピーして記録します。この情報は、この後の手順でビデオスキルを更新するときに必要になります。
- ページ中央に表示されるLambda関数の名前(があるボックス)をクリックします。下のペインに [関数コード] セクションが表示されます。
- [関数コード] セクションで、[コードエントリタイプ] メニューをクリックし、[.zipファイルをアップロード] を選択します。
- [アップロード] をクリックし、Node.jsで既に作成した
firetv-lambda.zip
ファイル(Lambdaデプロイパッケージの作成を参照)を選択します。 - [保存] をクリックします。[保存] をクリックすると、zipファイルがアップロードされます。
Lambda関数の詳細
Alexaはユーザーの発話(例:『インターステラー』を再生して)をリッスンし、そのリクエストをJSON形式のディレクティブとしてパッケージ化する、ということを覚えておいてください。Lambda関数は、Alexaから送信されたディレクティブを受信してアクションを実行します。Lambda関数は、ディレクティブのメッセージヘッダーにある名前空間と名前の値によって、リクエストの種類を判断します。たとえば、名前空間はリクエストがDiscover
ディレクティブであるか、またはChangeChannel
ディレクティブであるかを指定するので、これに応じてhandleDiscovery
関数またはhandleChannelControl
関数が呼び出されます。
サンプルLambda関数は、ディレクティブの基本的な処理を提供します。Lambda関数のコードをカスタマイズするには、スキルに対するあらゆる種類のユーザーリクエストを処理し、アプリによる適切なレスポンスをAmazon Device Messaging(ADM)経由で提供する必要があります。チュートリアルの後半では、ビデオスキルでさまざまなディレクティブを処理する方法をテストします。
次のステップ
次の 手順7: Fire TVスキルのセクションを更新するに進みます。
問題が発生して続行できない場合は、クラウド側の統合に関するトラブルシューティングを参照してください。