Step functions SNS連携でSNS.InvalidParameterExceptionエラー

富松広太 2019年3月29日

先日、Step functionsでjson形式でSNS連携ををしようとしたところ、
下記のようなメッセージでエラーとなってしまいました。

エラー

SNS.InvalidParameterException

原因

Invalid parameter: Message Structure – Failed to parse JSON
SNSのpublishでjsonを利用する際は、トップを”default”にする必要があるらしいです。
CLIやAPIのリファレンスに書いてありました。
https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html

対応

入力が下記のようになるように調整($.defaultが存在するように)
(1)stepfunctionの入力の際、defaultが含まれるようにする
 例:
  {
   ”region”: “us-west-2″,
   ”instance_id”: “i-xxxxxxxxxxxxxxxxx”,
   ”default”: “2019022717_xxxxxxxxxx_us-west-2_i-xxxxxxxxxxxxxxxxx”
  }

(2)ステートメント言語を変更

 ステートメント言語のParameters部分を下記のように記載
  “Message.$”: “$”,
  “MessageStructure”: “json”

 参考ドキュメント
 https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/connectors-sns.html

上記でエラーとならず、SNS配信することができました。
が、手軽な実装でしたらSNSをそのまま使うのも良いですが、
上記のようにdefautに入れる行為が、ResultPathとの相性が悪く、
(私の知識不足なのかもしれませんが)Lambdaの方が柔軟性があるように思いました。