結論から先に言うと
- AWS CLIからadd-permissionを実行する。その際、以下の設定が必要
- principalに
alexa-connectedhome.amazon.com
を指定 - event-source-tokenに
Alexa Smart HomeのスキルID
を指定 - source-arnは特に指定しない
-
terraformからはevent-source-tokenを指定できないため、Alexa Smart Homeのトリガーは設定できない(2018/06/01現在)- terraformからも、version 1.29.0以降のAWS Providerを利用することで、event-source-tokenを指定できるようになった。
- AWS CLIと同様のパラメータを指定することで、AlexaSmartHomeのトリガーを設定できる。
- https://www.terraform.io/docs/providers/aws/r/lambda_permission.html#event_source_token
前提
Alexa Smart Home SkillのコードはAWS上でLambda関数としてホストされる。
そのために、Alexaコンソールに表示されているスキルIDを指定して、Alexa Smart HomeをLambdaのトリガーとして設定しなければならない。
AWS Console上で設定する方法はドキュメントに記載されていたが、AWS CLIまたは、Terraformで設定したかった。
AWS CLIからAlexa Smart Homeのトリガー設定
以下の通り指定することで LambdaにAlexa Smart Homeのトリガーを追加することができる。
aws lambda add-permission \
--region us-west-2 \
--function-name (対象のLambda Function名) \
--statement-id (statement-id) \
--principal alexa-connectedhome.amazon.com \
--action lambda:InvokeFunction \
--event-source-token (Alexa Smart HomeのスキルID)
Lambdaからadd-permissionする際は、ARNを指定する場合が多いが、Alexa Smart Homeの場合はevent-source-token
にスキルIDを指定する。
Principalはalexa-connectedhome.amazon.com
を指定。
TerraformからAlexa Smart Homeのトリガー設定
当初、terraformで上記の設定を行えないかと調べたが、event_source_tokenが設定できないため、SmartHomeSkillのトリガー追加には未対応のようでissueが挙げられていた。(2018/06/01現在)
Terraformからも、event_source_tokenを指定することができるようになったため、
同様の設定内容を指定することで、トリガーを追加することができる。
https://www.terraform.io/docs/providers/aws/r/lambda_permission.html#event_source_token
https://github.com/terraform-providers/terraform-provider-aws/pull/5264
event-source-tokenの詳細は公式ドキュメントに記載されている
余談
ちなみに、カスタムスキルのトリガー設定方法については、公式ドキュメントに記載されている
https://developer.amazon.com/ja/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html#use-aws-cli