Alexa-hostedスキルを使用してスキルをエンドツーエンドで作成する



Alexa-hostedスキルを使用してスキルをエンドツーエンドで作成する

通常、Alexaスキルのコードとリソースは開発者自身が保存します。しかし、Alexa-hostedスキルを作成すると、Alexaはコードとリソースを開発者に代わってAWSに保存します。Alexa-hostedスキルでは、開発者コンソールで利用可能なスキルテンプレートを使用して、すぐにスキル開発を始められます。また、スキルのコーディングは開発者コンソールのオンラインコードエディタで行うことができます。Alexa-hostedスキルの作成や管理に、Alexa Skills Kitコマンドラインインターフェース(ASK CLI)を使うこともできます。

Alexa-hostedスキルとして開発できるのはカスタム音声対話モデルのスキルのみです。現時点では、スマートホームスキルなど、プリビルドされた音声対話モデルを使用するAlexa-hostedスキルは作成できません。

概要

Alexa-hostedスキルでは、スキルの作成、編集、公開がすべて開発者コンソールで完結します。オンラインコードエディタを使えば、スキルのコードを編集し、AWS Lambdaエンドポイントに直接デプロイできます。Node.jsバージョン10.xまたはPythonバージョン3.7を使用してAlexa-hostedスキルを構築できます。スキルを作成するときに、スキルのランタイムを選択します。スキルのランタイムを選択すると、後から変更できません。

Alexa-hostedスキルを作成すると、Alexaは以下をプロビジョニングします。

  • Alexaのサービスリージョン(3つすべて)のAWS Lambdaエンドポイント
  • メディアストレージ用のAmazon S3バケット
  • セッションの永続性を管理するための、Amazon S3でバックアップされたkey-valueテーブル
  • AWS CodeCommitリポジトリ

スキルユーザーから近いリージョンでS3リソースをプロビジョニングすることで、スキルの体感速度を向上することができます。詳細はリソースをさまざまなAWSリージョンでホスティングするを参照してください。

既存のスキルをAlexa-hostedスキルに移行する場合は、Alexa-hostedスキルを新規作成してから、Alexa-hostedスキルにコンテンツを追加します。現在、既存のAlexaスキルをAlexa-hostedスキルに直接移行することはできません。しかし、GitリポジトリをAlexa-hostedスキルにインポートすることはできます。詳細についてはGitリポジトリをAlexa-hostedスキルにインポートするを参照してください。

Alexa-hostedスキルを作成するためにAWSアカウントは必要ありません。Alexaは、必要なAWSリソースをAlexa開発者コンソールから直接プロビジョニングします。Alexaはファイルやリソースを、他のユーザーのアカウントから切り離された個々のアカウントに配置します。また、ファイルが他のユーザーと共有されることはありません。そのほかのAWSサービスを利用する必要がある場合やAWS無料利用枠を超えた場合、追加のリソースのプロビジョニングには独自のAWSアカウントが必要です。詳細については、Alexa-hostedスキルで個人のAWSリソースを使用するを参照してください。

スキルを作成すると、コード管理用のAWS CodeCommitリポジトリもセットアップされます。ASK CLIを使ってこのリポジトリにアクセスしてスキルを編集できます。詳細については、ASK CLIを使用したAlexa-hostedスキルの作成と管理を参照してください。

リソースをさまざまなAWSリージョンでホスティングする

スキル利用時の体感速度を向上するため、AlexaはAlexa-hostedスキル用に3つのAWS Lambdaエンドポイントをプロビジョニングします。Alexaは、以下の各リージョンでスキルのLambdaエンドポイントをプロビジョニングします。

  • 米国東部(バージニア北部)us-east-1
  • 欧州(アイルランド)eu-west-1
  • 米国西部(オレゴン)us-west-2

これらのリージョンにAmazon S3リソースをプロビジョニングできます。次の表に基づいた、ユーザーに最も近いリージョンを選択することをお勧めします。以下は、コンソールでスキルの作成時にデフォルトのホスティングリージョンとして表示されます。

言語 マーケットプレイス 推奨されるAWSリージョン
英語(オーストラリア) .com.au 米国西部(オレゴン)us-west-2
英語(カナダ) .ca 米国東部(バージニア北部)us-east-1
英語(インド) .in 欧州(アイルランド)eu-west-1
英語(英国) .co.uk 欧州(アイルランド)eu-west-1
英語(米国) .com 米国東部(バージニア北部)us-east-1
フランス語(カナダ) .ca 米国東部(バージニア北部)us-east-1
フランス語(フランス) .fr 欧州(アイルランド)eu-west-1
ドイツ語(ドイツ) .de 欧州(アイルランド)eu-west-1
ヒンディー語(インド) .in 欧州(アイルランド)eu-west-1
イタリア語(イタリア) .it 欧州(アイルランド)eu-west-1
日本語(日本) .co.jp 米国西部(オレゴン)us-west-2
ポルトガル語(ブラジル) .com.br 米国東部(バージニア北部)us-east-1
スペイン語(スペイン) .es 欧州(アイルランド)eu-west-1
スペイン語(メキシコ) .com.mx 米国東部(バージニア北部)us-east-1
スペイン語(米国) .com 米国東部(バージニア北部)us-east-1

使用制限

developer.amazon.comアカウントでは、作成できるAlexa-hostedスキルの数は最大75個です。アカウントに既に75個のAlexa-hostedスキルがある場合、新しい別のAlexa-hostedスキルを作成する前に1個削除する必要があります。

Alexa-hostedスキルはAWSリソースを使用します。リソースはAWSの無料利用枠内に制限されています。Alexa開発者アカウントごとに次の制限が適用されます。

  • AWS Lambda: 月あたり、100万件のAWS Lambdaリクエスト、320万秒のコンピューティング時間を利用できます。
  • Amazon S3: 月あたり、5 GBのAmazon S3ストレージ、20,000件のGETリクエスト、2,000件のPUTリクエスト、15 GBのデータ転送を利用できます。
  • AWS CodeCommit: 月あたり、50 GBのストレージ、10,000件のGitリクエストを利用できます。

Alexa-hostedスキルの月額のAWS使用量は、Alexa開発者コンソールホスティングページで確認できます。また、Amazon S3ストレージの使用量は、コードエディタタブの左下にメディアストレージ: S3[n.n/5GB]と表示されます。使用状況には、セッション永続性用データのストレージなどが含まれます。

AWS無料利用枠の上限を超えると、少なくとも1つのスキルを個人のAWSアカウントまたは別のクラウドサービスアカウントに移動させることで利用量を制限以内に抑えるために30日間の猶予が与えられます。使用量が無料枠の制限を下回らないと、スキルがAlexaスキルストアから削除される可能性があります。スキル用にプロビジョニングされたリソースを悪用しているとフラグされた場合、スキルは30日前にスキルストアから削除される可能性があります。

コンソールでAlexa-hostedスキルを作成する

以下の手順に沿って、開発者コンソールでAlexa-hostedスキルを作成できます。公開GitリポジトリからスキルプロジェクトをインポートしてAlexa-hostedスキルを作成するには、GitリポジトリをAlexa-hostedスキルにインポートするを参照してください。ASK CLIを使用してAlexa-hostedスキルを作成するには、ASK CLIを使用したAlexa-hostedスキルの作成と管理を参照してください。

コンソールでAlexa-hostedスキルを作成する

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキルの作成をクリックします。新しいスキルを作成ページが表示されます。
  3. ページの右上のホストするリージョンで、デフォルトのままにするか、別のホスティングリージョンを選択します。ホスティングするリージョンによって、Amazon S3バケットの場所が決まります。詳細はリソースをさまざまなAWSリージョンでホスティングするを参照してください。
  4. スキル名に名前を入力します。
  5. デフォルトの言語で言語を選択します。
  6. スキルに追加するモデルを選択カスタムを選択します。
  7. スキルのバックエンドリソースをホスティングする方法を選択で、Alexa-Hosted(Node.js)またはAlexa-Hosted(Python)を選択します。
  8. スキルを作成をクリックします。スキルに追加するテンプレートを選択ページが表示されます。
  9. テンプレートを選択してテンプレートで続けるボタンをクリックするか、スキルをインポートボタンをクリックします。詳細についてはGitリポジトリをAlexa-hostedスキルにインポートするを参照してください。約1~2分後、コンソールにスキルが表示され、ビルドページが開きます。

スキルを作成すると、音声モデル、AWSリソース、コードエディタが有効になり、開発者コンソールが音声モデルのビルドを開始します。

Alexa-hostedスキルで使用する音声およびビジュアルファイルはAmazon S3に保存することができます。詳細については、Alexa-hostedスキルでメディアファイルを使用するを参照してください。

Alexa-hostedスキルで使用するセッションデータはAmazon S3に保存することができます。詳細については、Alexa-hostedスキルでセッション永続性を使用するを参照してください。

エンドポイントとデプロイ

Alexaは、Alexaの各サービスリージョンにAlexa-hostedスキルのAWS Lambdaエンドポイントをプロビジョニングします。ホストされたデフォルトのエンドポイントを変更すると、スキルはAlexa-hostedスキルではなくなり、コンソールのコードエディターで新しいエンドポイントにデプロイしなくなります。デフォルトのエンドポイントを変更した場合、コンソールのコードエディターからの操作で、Alexa-hostedエンドポイントに戻すことができます。

Alexa-hostedスキルが公開されると、コンソールには2つのステージのスキルが表示されます。1つは公開中、1つは開発中です。スキルの開発中ステージでは、コードエディターを使ってコードの編集、保存、AWS Lambdaエンドポイントの開発中バージョンへのデプロイができます。このアクションは、スキルの公開中エンドポイントに影響しません。その後、テストタブに移動し、変更をテストできます。

スキルの音声モデルを変更した場合は、スキルの再認定を申請する必要があります。スキルのコードのみを変更した場合、コードエディターの公開中にするボタンをクリックしてコードを開発中から公開中に昇格させます。この操作では、公開したスキルの公開中ステージのコードが置換されます。

Alexa-hostedスキルの公開中コードの簡易修正には、まず開発中ステージで変更を行い、変更をテストしてから、スキルの公開中エンドポイントに変更を昇格させることをおすすめします。公開中スキルへの簡易修正を、開発中コードとマージせずに適用したい場合は、公開中エンドポイントを直接修正できます。ただし、変更内容を事前にテストすることはできません。公開中エンドポイントを直接修正するには、公開中ステージのコードエディターを開き、コードを編集して、デプロイして公開をクリックします。

依存関係の追加

Alexaは、ビルドスクリプトを実行するためにスキル用のAWS CodeBuildをプロビジョニングします。npm(Node.js)またはpip(Python)は、ビルドスクリプトの一部として自動的に実行されます。デプロイボタンをクリックすると、追加されたライブラリや依存関係が取得されてビルドされます。

  • Node.js — package.jsonファイルのdependenciesセクションに依存関係を追加します。例:

    "i18next": "^10.5.0"
    
  • Python — requirements.txtファイルのdependenciesセクションに依存関係を追加します。例:

    boto3==1.9.216
    

Amazon CloudWatchログの表示

Alexa-hostedスキルはAmazon CloudWatchログを自動的に提供します。これにより、スキルの開発に不可欠な情報にアクセスできます。

CloudWatchログを表示するには

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキル一覧で、表示するスキルの名前をクリックします。
  3. コードエディタタブをクリックします。
  4. 左下隅にあるメディアストレージ: Amazon CloudWatchをクリックします。AWSコンソールの限定ビューが開き、ログが表示されます。スキルが公開されていない場合、ログはまだありません。

Alexa-hostedからセルフホストへの移行

既存のAlexa-hostedスキルをセルフホストの環境に移行するには、Alexa-hostedスキルのAmazon S3リソースを所有のストレージに移行し、コードを新しいスキルエンドポイントに手動で移行して、開発者コンソールでスキルのエンドポイントを変更する必要があります。スキルをダウンロードして、Alexa-hostedからセルフホストにスキルを移行できます。

スキルをダウンロードする

スキルは、開発ステージまたは公開中ステージのいずれかで、スキルのコードエディタタブからダウンロードできます。開発ステージでは、最新のコード変更でスキルをダウンロードできます。公開中ステージでは、公開中のスキルのコピーをダウンロードできます。ダウンロードパッケージには、スキルの対話モデル、ソースコードファイル、スキルマニフェストが含まれます。

スキルのコピーをダウンロードするには

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキル一覧で、ダウンロードするスキルの名前をクリックします。
  3. コードエディタタブをクリックします。
  4. 左上にあるスキルのダウンロードアイコンをクリックします。
  5. ポップアップウィンドウで、続けるを選択します。
  6. スキルを.zipファイルとして保存します。

スキルの可用性チェックを除外する

Alexa-hostedスキルからAWS Lambdaへの呼び出しが正しく機能するように、Alexa-hostedスキルのサービスからAWS Lambda関数に可用性チェックが定期的に送信されます。Alexaは、LaunchRequestの形式でalexa-lambda-availabilityユーザーからの可用性チェックを送信します。LaunchRequestによってスキルがアクションを実行する場合、ユーザー情報にalexa-lambda-availabilityが含まれるリクエストを除外することで、スキルが不必要なアクションを実行しないようにします。

以下は、Alexaからスキルに送信される可用性チェックの例です。

{
  "version": "1.0",
  "session": {
    "new": true,
    "sessionId": "alexa-lambda-availability",
    "application": {
      "applicationId": "YOUR_SKILL_ID"
    },
    "user": {
      "userId": "alexa-lambda-availability"
    }
  },
  "context": {
    "AudioPlayer": {
      "playerActivity": "IDLE"
    },
    "System": {
      "application": {
        "applicationId": "YOUR_SKILL_ID"
      },
      "user": {
        "userId": "alexa-lambda-availability"
      },
      "device": {
        "deviceId": "test-device",
        "supportedInterfaces": {
          "AudioPlayer": {}
        }
      },
      "apiEndpoint": "https://api.amazonalexa.com",
      "apiAccessToken": "{token}"
    }
  },
  "request": {
    "type": "LaunchRequest",
    "requestId": "amzn1.echo-api.request.alexa.lambda.availability",
    "locale": "ja-JP",
    "shouldLinkResultBeReturned": false
  }
}