AWS を用いた Alexa スキル開発

2019年4月20日

はじめに

こちら でお試しで作った、猫と犬の鳴き声を返す Alexa スキル「なきごえなあに」を、AWS を直接使って作ってみる。

環境

  • macOS Mojave (10.14.3)
  • Safari 12.0.3
  • Anaconda (Python 3.6.8)
  • Node.js 8.12.0
  • Amazon Echo Dot 第3世代

MFA 認証用

  • iPhone 7 (iOS 12.1.4)

Amazon 開発者アカウントは作成済み。

AWS アカウントの作成

AWS アカウントの作成

  • AWS アカウント作成の流れ に従う。
  • [AWS を今すぐ始める] をクリック。以下を入力。
    • Eメールアドレス
    • パスワード
    • パスワード (もう一度)
    • AWS アカウント名 (半角アルファベット、あとで変更可)
  • アカウントの種類で "パーソナル" を選び、フルネーム、電話番号、住所などをアルファベット・半角数字で入力。
  • クレジットカードの情報を入力。検証コードの入力で、SMS を選び、携帯電話番号を設定すると、携帯電話に 4 桁の数字が送られて来るので、それを入力する。

MFA 認証の設定

  • iPhone にアプリ Google Authenticator をインストールしておく。
  • IAM のページを開く。
  • 「ルートアカウントの MFA を有効化」を選択。[MFA の管理] をクリック。
  • 「多要素認証 (MFA)」の [MFA の有効化] をクリック。
  • 「仮想 MFA デバイス」を選択。
  • QR コードが表示されるので、Google Authenticator で読み込む。スマホに何かあったときのために、QR コードおよびシークレットキーを安全な場所に保存しておく。
  • MFA コードを 2 つ入力するようになっているが、Google Authenticator に数字が 6 桁表示され、時間によって変わるので、それを 2 つ入れればよい。

IAM ユーザーの作成

ルートユーザーを日常的な利用に使うのは推奨されていないので、制限のついた IAM ユーザーというものを作る。

  • IAM のページ の「個々の IAM ユーザーの作成」を選び、[ユーザーの管理] をクリック。
  • [ユーザーを追加] をクリック。
  • ユーザー名を設定。「AWS マネジメントコンソールへのアクセス」を選択。「コンソールのパスワード」で「カスタムパスワード」を選び、パスワードを設定。「パスワードのリセットが必要」のチェックは外しておく。
  • [次のステップ: アクセス権限] をクリック。
  • [グループの作成] をクリック。
  • グループ名を適当に ("users" とか) 設定。ポリシーは必要なものをチェックして、[グループの作成]。フルアクセス (AdministratorAccess) は怖いので、使いながらポリシーを設定したらよいかも。
  • [次のステップ: タグ] をクリック。
  • タグの追加は無視して、[次のステップ: 確認]。
  • 内容を確認して [ユーザーの作成] をクリック。

IAM のページ の上にある [IAM ユーザーのサインインリンク] のアドレスからログインする。

IAM パスワードポリシーの適用

  • IAM のページ の「IAM パスワードポリシーの適用」を選び、[パスワードポリシーの管理] をクリック。
  • パスワードのポリシーを好みのものに設定。[ユーザーにパスワードの変更を許可] にチェックがついていることを確認。
  • [パスワードポリシーの適用] をクリック。

パスワードは [マイセキュリティ資格情報] で変えられる。

参考

Alexa スキルの作成

IAM ユーザーの権限の設定

ここからは IAM ユーザーで作業するが、権限を与える必要がある。IAM ユーザーのグループの "AWSLambdaFullAccess" のポリシーをアタッチ。インラインポリシーのカスタムポリシーで以下のように設定する。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:CreateRole",
        "iam:CreatePolicy",
        "iam:AttachRolePolicy"
      ],
      "Resource": "*"
    }
  ]
}

Alexa スキルの作成

  • Alexa 開発者コンソールで「なきごえなあに」スキルを作成。[独自のプロビジョニング] を選択。
  • インテントなどを設定 (JSON をコピペするとはやい)、ビルド。

Lambda 関数を作成

  • AWS マネジメントコンソール にログイン。
  • Lambda を検索。
  • 右上のリージョンで "東京" を選択。
  • [-から作成] を選択。
  • [関数名] に "Nakigoe" を設定。
  • [アクセス権限] の [実行ロール] で "基本的な Lambda アクセス権限で新しいロールを作成" を選択。
  • [関数の作成] をクリック。
  • 関数が作成される。[トリガーの追加] で "Alexa Skills Kit" をダブルクリック。下の [スキル ID] のところを表示。
  • Alexa 開発者コンソールのスキル一覧で、最初に作成したスキルの [スキル ID の表示] をクリックし、ID をコピー。
  • Lambda の [スキル ID] にコピー。
  • [追加] をクリック。
  • [保存] をクリック。

Lambda 関数の中身を作成

コマンドラインで作業。

Node.js を Anaconda でインストールする。

$ conda install nodejs=8.12.0

Lambda のパッケージを作る。

$ mkdir nakigoe
$ cd nakigoe
$ npm init
$ npm install --save ask-sdk-core
$ npm install --save ask-sdk-model

index.js を用意して、zip 圧縮。

$ zip -r lambda.zip index.js package.json node_modules
  • Lambda マネジメントコンソールで "Nakigoe" をクリック。
  • [コードエントリタイプ] で ".zip ファイルをアップロード" を選択し、lambda.zip をアップロード。
  • [保存] をクリック。

Alexa スキルと Lambda 関数の関連付け

  • Lambda マネジメントコンソールの画面の右上の "ARN" の右にあるアイコンをクリックすると、文字列がコピーされる。
  • Alexa 開発者コンソールの [エンドポイント] で [AWS Lambda の ARN] を選択。
  • [デフォルトの地域] に ARN をコピーする。
  • [エンドポイントを保存] をクリック。
  • Alexa スキルをテストする。

デバッグ

Lambda (Node.js) で console.log() で書き出したものは CloudWatch の [ログ] で確認できるので、これである程度デバッグできる。