開発者コンソール

Lambda関数について


Lambda関数について

Lambda関数は、ビデオスキルのバックエンドとして機能します。参照Lambdaコードをローカルで更新し、CLIツールを使用して、プロジェクトの更新、再ビルド、再デプロイを行い、Lambda関数をAWSに自動的にプッシュすることができます。

動作のしくみ

Lambda関数のすべてのスクリプトは、プロジェクトの./lambda/srcフォルダにローカルに保存されます。CLIツールを使用してビデオスキルをデプロイすると、これらのスクリプトがクラウドにプッシュされます。ビデオスキルが正常にデプロイされると、AWSコンソールでLambda関数全体を1つのファイルとして扱うことができます。AWSコンソールでは、以下のようにLambdaを検索できます。

AWSコンソールでのLambda関数の検索

関数名(<プロジェクト名>-lambda)をクリックします。Lambda関数はindex.jsファイル内にあります。

Lambdaコード

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ツールを使用せずに)手動でインストールする場合は、別のプロセスを実行する必要があります。

  1. プロジェクトのローカルフォルダ./lambdaに移動します。
  2. npm run releaseを実行します。
  3. ここで説明した手順に従って、ビデオスキルをデプロイするのと同じリージョンでAWS Lambda関数を作成します。
  4. コンパイルされたLambdaコードを、./lambda/dist/lambdaから、手順3で作成したAWS Lambda関数にコピーします。
  5. 手順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": ["*"]
        }
      ]
    }
    
  6. 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関数のカスタマイズを参照してください。