Lambdaの概要
Lambda関数は、ビデオスキルのバックエンドとして機能します。参照Lambdaコードをローカルで更新し、CLIツールを使用して、プロジェクトの更新、再ビルド、再デプロイを行い、Lambda関数をAWSに自動的にプッシュすることができます。
動作のしくみ
Lambda関数のすべてのスクリプトは、プロジェクトの./lambda/src
フォルダにローカルに保存されます。CLIツールを使用してビデオスキルをデプロイすると、これらのスクリプトがクラウドにプッシュされます。ビデオスキルが正常にデプロイされると、AWSコンソールでLambda関数全体を1つのファイルとして扱うことができます。AWSコンソールでは、以下のようにLambdaを検索できます。
関数名(<プロジェクト名>-lambda
)をクリックします。Lambda関数はindex.js
ファイル内にあります。
CLIツールを使用すると、ローカルに保存された特定のスクリプトの更新(ビデオコンテンツのdatabase.js
スクリプトの更新など)、Lambdaコンポーネントの更新と再デプロイ、更新されたLambda関数のクラウドへのプッシュのみに集中できます。
Lambda関数は、AlexaからディレクティブをJSONとして受け取って処理し、所定のJSON形式を使用してレスポンスを返します。ディレクティブは、特定のアクション(ビデオのメタデータの取得など)の実行に関する命令を含むJSONメッセージです。現在、参照Lambdaコード内にはビデオコンテンツデータベースとして機能するJSONオブジェクトが埋め込まれています。
所有する別の既存データベースとやり取りするようにLambda関数を構成するには、データベースアクセスクラスを変更して、このデータベースでクエリを実行し、参照コードと同じ方法で構造化されたデータを返します。残りのLambdaコードは、データベースアクセスレイヤーによって返されるコンテンツに動的に応答するため、変更する必要はありません。
デフォルトでは、参照Lambda関数は(「ontv」という名前の)Gracenoteカタログを使用します。Alexaによって統合済みのカタログを所有しており、そのカタログを代わりに使用する場合は、カタログ名の使用を参照してください。
機能
参照Lambda関数は、以下の主な機能をサポートしています。
機能 | 指定方法 | 例 |
---|---|---|
検索 | Video id |
「『ストレンジャー・シングス』」を検索して」 「『サイク/名探偵はサイキック?』のシーズン1を検索して」 「『ブラックパンサー』を検索して」 |
検索 | Actor Name |
「リーアム・ニーソンの映画を検索して」 「ジェイミー・フォックスの映画を検索して」 |
検索 | Genre |
「コメディ映画を検索して」 「アクション映画を検索して」 「アドベンチャー映画を検索して」 |
検索 | Actor + Genre など、複数のビデオメタデータフィールド |
「リーアム・ニーソンのアクション映画を検索して」 「ジェニファー・アニストンのコメディTVシリーズを検索して」 検索結果ページでは、次のような発話を行うこともできます。 「2番目を選択して」 「1番を再生して」 |
クイック再生 | Video Name |
「『ストレンジャー・シングス』を見せて」 「『サイク/名探偵はサイキック?』のシーズン1のエピソード1を見せて」 「『ブラックパンサー』を見せて」 |
クイック再生 | Actor Name |
「リーアム・ニーソンの映画を見せて」 「ジェイミー・フォックスの映画を見せて」 |
クイック再生 | Genre |
「コメディ映画を見せて」 「アクション映画を見せて」 「アドベンチャー映画を見せて」 |
クイック再生 | Actor + Genre など、複数のビデオメタデータフィールド |
「リーアム・ニーソンのアクション映画を見せて」 「ジェニファー・アニストンのコメディTVシリーズを見せて」 |
チャンネルナビゲーション | 「PBSに変えて」 「NBCに変えて」 |
|
閲覧とリスト選択 | 「別のカテゴリーのリストを見せて」 次のように発話して、[その他のカテゴリー] にあるほかのカテゴリーを確認できます。 「人気の映画を選択して」 「その他のカテゴリーを選択して」 |
トランスポートコントロールは、参照ソフトウェアに含まれるウェブプレーヤーによって指定されることに注意してください。
Lambda関数のインストールと更新
Lambda関数はAWSでホストする必要があります。そのための処理は、インストールプロセス中にCLIツールで行われます。スキルマニフェストでの構成も必要です。これは開発者ポータルで行うことができますが、通常は、プロジェクトに含まれるAlexa Video Infrastructure CLIツールで自動的にセットアップされます。
--deploy
を使用すると、Alexa Video Infrastructure CLIツールによってLambda関数が作成され、デプロイされます。この処理は、参照ビデオスキルのセットアップ中に行われます。
開発サイクル中にLambdaコードを更新およびデプロイするには、--update --lambda
を使用します。これにより、開発プロセスが大幅にスピードアップします。
手動でのLambda関数のインストールプロセスについては、手動でのLambda関数のセットアップ(省略可能)を参照してください。
Lambda関数は、ビデオスキルのマニフェストで構成する必要があります。この構成はプロジェクトに含まれるAlexa Video Infrastructure CLIツールで自動的に行われますが、手動で構成する場合は、Alexa開発者コンソールにアクセスし、手動でのLambda関数のセットアップ(省略可能)の手順を実行してください。
手動でのLambda関数のセットアップ(省略可能)
Lambda関数を(CLIツールを使用せずに)手動でインストールする場合は、別のプロセスを実行する必要があります。
- プロジェクトのローカルフォルダ
./lambda
に移動します。 npm run release
を実行します。- ここで説明した手順に従って、ビデオスキルをデプロイするのと同じリージョンでAWS Lambda関数を作成します。
- コンパイルされたLambdaコードを、
./lambda/dist/lambda
から、手順3で作成したAWS Lambda関数にコピーします。 -
手順3で作成したLambda関数の実行ロールに、次のポリシーを追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": ["*"] } ] }
-
Lambda関数用のDynamoDBデータベースを作成し、次の仕様を使用してページ分割用のデータを保存します。
"PaginationDatabase": { "Type" : "AWS::DynamoDB::Table", "Description": "ページ分割用のデータを保持します", "Properties" : { "TableName" : { "Fn::Sub": [ "${ProjectName}-pagination-table", { "ProjectName": { "Ref": "ProjectName" } } ] }, "AttributeDefinitions" : [ { "AttributeName" : "token", "AttributeType" : "S" } ], "KeySchema" : [ { "AttributeName" : "token", "KeyType" : "HASH" } ], "ProvisionedThroughput" : { "ReadCapacityUnits" : "5", "WriteCapacityUnits" : "5" } } }
次のステップ
Lambda関数のカスタマイズを参照してください。