見出し画像

[AWS]GreengrassのコンポーネントデプロイでNode-REDのフローを別のフローに置き換える

Greengrassはパブリックコンポーネントとして正式的にDockerでNodeREDを立ち上げたり編集したりする方法もあるみたいなのですが、今回はパブリックコンポーネントの使い方が分からないので気合でGreengrassのコンポーネントデプロイを使って既存のNodeRedフローを書き換えようとします。

使用機材: ラズパイ3B+

NodeRedのフローのみの書き換えについて、こちらのサイトを参考にしたものの、私の環境では上手く行きませんでした。

サイトを引用しますと、「更新するフローのjsonファイルと、ファイルをNodeREDのディレクトリに移動してフローをリロードする処理を記述したスクリプト.shファイルをレシピ通りにデプロイすれば更新ができる」はずなのですが、私の環境では、、、

  • まず既存のフローが記載されているファイルの名前が「flows.json」でした。新しく「flows_update.json」みたいに別の.jsonファイルをディレクトリに置くのではなく、この「flows.json」の中身を上書き保存しないと、フローは変わってくれません。

    対処→既存のflows.jsonを削除してから、更新すべきflows.jsonをデプロイする

  • しかしそのままhome/pi/.node-redフォルダの配下に、新しい「flows.json」を置くと、拡張子は.jsonなのにプロパティが平文テキストだったので実質平文テキストのファイルになってしまい、NodeRedが読み取れなくなっちゃうのでフローの更新ができませんでした。

    原因?→.node-redフォルダが隠しフォルダのため、Greengrassからhome/pi/.node-red配下に直に.jsonファイルをデプロイすると不具合が起るから?
    対処→新しく非隠しフォルダを作成し、一旦そこにデプロイしてから、home/pi/.node-red配下に移動する。

以上を踏まえて、私の環境でデプロイするべき.shファイルは以下のようになりました。


sudo rm /home/pi/.node-red/flows.json &&    
sudo cp -a -f $1/flows.json /home/pi/.node-red/temp &&
sudo mv /home/pi/.node-red/temp /home/pi/.node-red/flows.json &&
sudo node-red-reload

&&コマンドは一行の処理が終わってから次の行の処理を実行するので、絶対に付けておきます。

  1. rmで既存のflows.jsonを削除

  2. Greengrassレシピからの更新flows.jsonを新規フォルダ「temp」にコピー

  3. tempフォルダの中身を.node-red配下へ移動、flows.jsonに再命名、tempフォルダ削除

  4. NodeRedの再起動


参考: cpコマンドのオプション
cpコマンドのaオプションのおかげで、3番目の挙動が成立してる模様です。


プロパティが異なる同じ名前の「flows.json」が同じディレクトリで共存してました。少し驚きました。


この記事が気に入ったらサポートをしてみませんか?