こんにちは、サーバーワークスのこけしの人、坂本(@t_sakam)です。
さて、前回の「Alexa虎の巻」の第9回目では「Session Persistence(セッション永続性)」を使って「こんにちは。○回目のご利用ありがとうございます。」とAlexaがスキルの利用回数を言ってくれるようにコードを変更しました。
今回は、実際にS3に保存されたデータの確認をしていきます。また「Alexa-hostedスキル」のS3へのアクセス権限はこんな設定になっているんじゃないかな?」ということも想像で確認してみたいと思います。(実際は「Alexa-hostedスキル内のS3へのアクセス権限」は見えないので想像の設定になります。)
1. Alexa開発者コンソールのトップページ
Alexa開発者コンソールにログインします。「豆知識スキル」リンクをクリックします。
2. 「豆知識スキル」のトップページ
「豆知識スキル」のトップページが表示されたら、画面上メニューから「コードエディタ」を選択します。
3. コードエディタ
画面左下の「メディアストレージ: S3[0.4/5GB]」リンクをクリックします。
4. S3の「Media」フォルダ
前回も記載しましたが「Media」フォルダにはデータはないので、画面上の「911xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx22-us-east-1」リンクをクリックします。
5. S3バケットのルート
前回と違い、ファイルができていることがわかります。ファイル名は以下のようなAlexaを利用しているユーザーのアカウントのUser IDになっています。「amzn1.ask.account.AH7EFETKGDVGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX」
ファイル名をクリックします。
6. オブジェクトURL
画面下のオブジェクトURLをクリックします。
7. AccessDenied
画面に「AccessDenied」と出てファイルの中身は確認できません。
8. S3の設定(想像)
Alexa-hostedスキルではこのようにS3に作成されたファイルにアクセスできないように自動で設定してくれていますが、実際にどのような設定になっているかまではわかりません。
ですので、AWSではどのような設定になっていて、アクセスできないのかを想像して確認してみたいと思います。
実際のAlexa-hostedスキルの設定は見れないので、他のAWSアカウントを使って「こんな設定になっているのかな?」というのを確認していきます。
9. ブロックパブリックアクセス(想像)
S3のマネジメントコンソールの左メニューに「ブロックパブリックアクセス(アカウント設定)」という箇所があるので、クリックします。
10. パブリックアクセスをすべてブロック(想像)
「パブリックアクセスをすべてブロック」という設定は「オン」になっているのではないかと思います。すべてのパブリックアクセスはブロックしておいて、あとは個別の設定で「AlexaスキルのLambdaファンクションからのアクセスを許可する」というような設定がされているのではないかと思います。
11. AlexaスキルのLambda(想像)
こちらはAlexaスキルのLambdaファンクションのマネジメントコンソールの画面です。「実行ロール」リンクをクリックします。
12. IAMロール(想像)
Lambdaファンクションの実行ロールとして設定されているIAMロールです。CloudWatch Logsの書き込みに対応しているAWS 管理ポリシーの「AWSLambdaBasicExecutionRole」とS3へのアクセス用のIAMポリシーが割り当てられています。
S3へのアクセス用のIAMポリシーのポリシー名をクリックして、ポリシーの中身を確認します。
13. S3へのアクセス用のIAMポリシー(想像)
許可するアクションはPutObjectとGetObjectの2つに絞り、許可するリソースは利用したいバケット1つに絞ったポリシーになっています。
14. 想像の部分のまとめ
このような設定がされていることで、S3へのアクセスが制限されているのではないかな? と思います。
15. ファイルをダウンロード
では、元の手順に戻ります。「amzn1.ask.account.AH7EFETKGDVGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX」ファイルの中身がブラウザからは見れませんでしたので、このファイルをダウンロードしたいと思います。「ダウンロード」ボタンを押します。
16. ダウンロード完了
ダウンロードできました。
17. ダウンロードしたファイルを確認
ダウンロードしたファイルをダブルクリックして開きます。
18. ファイルの中身
ちゃんと「index.js」ファイルで指定した通り、{"counter":1}と書き込まれています。
19.「2回目のご利用…」になるかを確認
念の為、もう一度テストをして「2回目のご利用…」になるかを確認してみます。
下のキャプチャの通り、ちゃんと「2回目のご利用…」になりました。
20. ファイルの中身
再度、ファイルをダウンロードしてみます。こちらもちゃんと{"counter":2}と書き込まれていることが確認できました。
まとめ
今回は「Alexa-hostedスキルでセッション永続性を使用する」の第2回目でした。実際にS3に保存されたデータの確認をしたり「Alexa-hostedスキル内のS3へのアクセス権限はこんな設定になっているんじゃないかな?」ということを想像で確認してみました。
Alexa-hostedスキルを使わない場合は、今回想像で確認したようなIAMポリシー等の設定を自分で行わなければいけませんが、Alexa-hostedスキルの場合は自動で設定されているので、便利ですね!
いや〜、「Alexa」って本当にいいものですね!