GreengrassのImage Classification connectorsがうまくデプロイ出来なかった時の対応

GreengrassのImage Classification connectorsを試そうとしたところ設定ミスによりデプロイがうまく動きませんでした。 このブログではエラーを解消した手順についてご紹介します。
2019.02.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

サーバーレス開発部@大阪の岩田です。

AWSのブログ Machine Learning at the Edge: Using and Retraining Image Classification Models with AWS IoT Greengrass で紹介されている、ラズパイを使ったエッジデバイスでの機械学習を試していたところGreengrassグループへのデプロイが失敗してしまいました。

設定を修正しデプロイが成功するようになったので対応手順をご紹介します。

デプロイ失敗の原因

まず結論から。 デプロイに失敗していたのはGreengrassグループに適切なIAMロールが設定できていなかったことが原因でした。

上記AWSブログで紹介されている手順では、SageMakerのトレーニング済みモデルを利用してエッジデバイスのローカルで推論処理を実行します。そのため、Greengrassグループに対してSageMakerのトレーニングジョブにアクセス可能な適切なIAMロールを設定する必要がありました。

公式ドキュメントにちゃんと書かれてました。

デプロイ失敗〜成功までの道のり

実際に順を追って振り返っていきます。

最初にデプロイを実行したところ、worker with xxx failed to initializeというエラーが発生しました。

ラズパイ側のログを確認したところ、このようなログが出力されていました。

/greengrass/ggc/var/log/system/runtime.log

the group owner of the resource /greengrass/ggc/deployment/mlmodel/953f27ca89cc98451bd8e5060bb7735113d1a4f70249e7e8cc3cd4a65c38c79e.tar.gz::1549178964000 is empty

mlmodel/xxxxx is emptyとあるので、なにやら機械学習のモデル周りが怪しそうです。 ここからImage Classification connectors周りの設定が原因と当たりをつけ、ドキュメントを読み返してみるとconnectorsの要件として

ターゲットトレーニングジョブで sagemaker:DescribeTrainingJob アクションを許可する、Greengrass グループロールに追加された IAM ポリシー

という記載を見つけました。 自分のGreengrassグループの設定を確認してみると・・・

ロールが設定されていませんでした。

ロールを設定します。なお、設定するロールにはsagemaker:DescribeTrainingJobを許可しています。

ロールの設定完了後に再度デプロイしてみます。

今度は正常に終了しました!!

まとめ

GreengrassのImage Classification connectorsがうまくデプロイ出来なかった時の対応をご紹介しました。 最初はエラーメッセージをググればすぐに解決できるだろうと思っていたのですが、検索ではそれらしき情報がヒットせず、ドキュメントを読み直して調査・対応することになりました。 同じような事象でハマっている方の参考になれば幸いです。