Alexa虎の巻(10)Alexa-hostedスキルでセッション永続性を使用する(2)

記事タイトルとURLをコピーする

Alexa虎の巻(10)Alexa-hostedスキルでセッション永続性を使用する(2) こんにちは、サーバーワークスのこけしの人、坂本(@t_sakam)です。

 さて、前回の「Alexa虎の巻」の第9回目では「Session Persistence(セッション永続性)」を使って「こんにちは。○回目のご利用ありがとうございます。」とAlexaがスキルの利用回数を言ってくれるようにコードを変更しました。

 今回は、実際にS3に保存されたデータの確認をしていきます。また「Alexa-hostedスキル」のS3へのアクセス権限はこんな設定になっているんじゃないかな?」ということも想像で確認してみたいと思います。(実際は「Alexa-hostedスキル内のS3へのアクセス権限」は見えないので想像の設定になります。)

1. Alexa開発者コンソールのトップページ

 Alexa開発者コンソールにログインします。「豆知識スキル」リンクをクリックします。

Alexa虎の巻(10)キャプチャ001

2. 「豆知識スキル」のトップページ

 「豆知識スキル」のトップページが表示されたら、画面上メニューから「コードエディタ」を選択します。

Alexa虎の巻(10)キャプチャ002

3. コードエディタ

 画面左下の「メディアストレージ: S3[0.4/5GB]」リンクをクリックします。

Alexa虎の巻(9)キャプチャ017

4. S3の「Media」フォルダ

 前回も記載しましたが「Media」フォルダにはデータはないので、画面上の「911xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx22-us-east-1」リンクをクリックします。

Alexa虎の巻(9)キャプチャ018

5. S3バケットのルート

 前回と違い、ファイルができていることがわかります。ファイル名は以下のようなAlexaを利用しているユーザーのアカウントのUser IDになっています。「amzn1.ask.account.AH7EFETKGDVGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX」

 ファイル名をクリックします。

Alexa虎の巻(9)キャプチャ019

6. オブジェクトURL

 画面下のオブジェクトURLをクリックします。

Alexa虎の巻(9)キャプチャ020

7. AccessDenied

 画面に「AccessDenied」と出てファイルの中身は確認できません。

Alexa虎の巻(9)キャプチャ021

8. S3の設定(想像)

 Alexa-hostedスキルではこのようにS3に作成されたファイルにアクセスできないように自動で設定してくれていますが、実際にどのような設定になっているかまではわかりません。

 ですので、AWSではどのような設定になっていて、アクセスできないのかを想像して確認してみたいと思います。

 実際のAlexa-hostedスキルの設定は見れないので、他のAWSアカウントを使って「こんな設定になっているのかな?」というのを確認していきます。

9. ブロックパブリックアクセス(想像)

 S3のマネジメントコンソールの左メニューに「ブロックパブリックアクセス(アカウント設定)」という箇所があるので、クリックします。

Alexa虎の巻(10)キャプチャ009

10. パブリックアクセスをすべてブロック(想像)

 「パブリックアクセスをすべてブロック」という設定は「オン」になっているのではないかと思います。すべてのパブリックアクセスはブロックしておいて、あとは個別の設定で「AlexaスキルのLambdaファンクションからのアクセスを許可する」というような設定がされているのではないかと思います。

Alexa虎の巻(10)キャプチャ010

11. AlexaスキルのLambda(想像)

 こちらはAlexaスキルのLambdaファンクションのマネジメントコンソールの画面です。「実行ロール」リンクをクリックします。

Alexa虎の巻(10)キャプチャ011

12. IAMロール(想像)

 Lambdaファンクションの実行ロールとして設定されているIAMロールです。CloudWatch Logsの書き込みに対応しているAWS 管理ポリシーの「AWSLambdaBasicExecutionRole」とS3へのアクセス用のIAMポリシーが割り当てられています。

 S3へのアクセス用のIAMポリシーのポリシー名をクリックして、ポリシーの中身を確認します。

Alexa虎の巻(10)キャプチャ012

13. S3へのアクセス用のIAMポリシー(想像)

 許可するアクションはPutObjectとGetObjectの2つに絞り、許可するリソースは利用したいバケット1つに絞ったポリシーになっています。

Alexa虎の巻(10)キャプチャ013

14.  想像の部分のまとめ

 このような設定がされていることで、S3へのアクセスが制限されているのではないかな? と思います。

15. ファイルをダウンロード

 では、元の手順に戻ります。「amzn1.ask.account.AH7EFETKGDVGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX」ファイルの中身がブラウザからは見れませんでしたので、このファイルをダウンロードしたいと思います。「ダウンロード」ボタンを押します。

Alexa虎の巻(9)キャプチャ022

16. ダウンロード完了

 ダウンロードできました。

Alexa虎の巻(9)キャプチャ023

17. ダウンロードしたファイルを確認

 ダウンロードしたファイルをダブルクリックして開きます。

Alexa虎の巻(9)キャプチャ024

18. ファイルの中身

 ちゃんと「index.js」ファイルで指定した通り、{"counter":1}と書き込まれています。

Alexa虎の巻(9)キャプチャ025

19.「2回目のご利用…」になるかを確認

 念の為、もう一度テストをして「2回目のご利用…」になるかを確認してみます。

 下のキャプチャの通り、ちゃんと「2回目のご利用…」になりました。

Alexa虎の巻(9)キャプチャ026

20. ファイルの中身

 再度、ファイルをダウンロードしてみます。こちらもちゃんと{"counter":2}と書き込まれていることが確認できました。

Alexa虎の巻(9)キャプチャ027

まとめ

 今回は「Alexa-hostedスキルでセッション永続性を使用する」の第2回目でした。実際にS3に保存されたデータの確認をしたり「Alexa-hostedスキル内のS3へのアクセス権限はこんな設定になっているんじゃないかな?」ということを想像で確認してみました。

 Alexa-hostedスキルを使わない場合は、今回想像で確認したようなIAMポリシー等の設定を自分で行わなければいけませんが、Alexa-hostedスキルの場合は自動で設定されているので、便利ですね!

 いや〜、「Alexa」って本当にいいものですね!

坂本 知子(記事一覧)

サーバーワークスのこけしの人(@t_sakam)。2020 APN AWS Top Engineers。