今回やったこと
enebularのFlows機能ではなくFiles機能(利用するには有料プランの契約が必要です)を使用してデプロイ先のホストでプログラムを実行させてみました。
確認したこと
C言語ファイルのデプロイ時に、デプロイ先でコンパイルを実行して生成された実行ファイルが実行できることを確認しました。
デプロイ先のホスト環境
- AWS EC2 Debian上にenebular-agentをインストールしたホスト
- コネクションはAWS IoT
プログラム内容
実行時にテキストファイルに文字列を追加する簡単なプログラムとしました。
- プログラムコードファイル main.c
- プログラムをコンパイルして実行するスクリプトファイル main.sh
コード
#include <stdio.h>
int main(void)
{
FILE * fp;
fp = fopen( "./test.txt" , "a" );
if( fp == NULL ) {
printf( "file open error\n" );
return -1;
}
fputs("-----+\n" , fp );
fclose(fp);
return 0;
}
gcc -o main main.c ; ./main
確認手順
あらかじめ、main.shファイルをデプロイしておくことにより、main.cファイルをデプロイすると同時にコンパイルして実行することが可能になります。
1. main.shファイルをデプロイします
2. main.cファイルをデプロイします
「Stage」を「Post-Deploy」に設定することにより、main.cファイルデプロイ後に「Assets Path」に指定しているファイルを実行します。ここではmain.shを指定しています。
3. 実行ファイルが生成されているか確認します
デプロイ先のフォルダ「/home/enebular/enebular-runtime-agent/ports/awsiot/assets」を確認してmainファイルとが存在していることを確認します。
[root@ip-10-1-10-153:/home/enebular/enebular-runtime-agent/ports/awsiot/assets# ls -l
total 24
-rwxr-xr-x 1 enebular enebular 8792 Dec 5 06:28 main
-rw-r----- 1 enebular enebular 239 Dec 5 06:28 main.c
-rwxr----- 1 enebular enebular 28 Dec 5 06:27 main.sh
-rw-r--r-- 1 enebular enebular 7 Dec 5 06:28 test.txt
[root@ip-10-1-10-153:/home/enebular/enebular-runtime-agent/ports/awsiot/assets#
4.プログラムが実行されているか確認します
デプロイ先のフォルダ「/home/enebular/enebular-runtime-agent/ports/awsiot/assets」を確認してtest.txtファイルとが存在していることを確認して、さらにそのtest.txtファイルの内容が「-----+」となっていることを確認します。
[root@ip-10-1-10-153:/home/enebular/enebular-runtime-agent/ports/awsiot/assets# ls -l
total 24
-rwxr-xr-x 1 enebular enebular 8792 Dec 5 06:28 main
-rw-r----- 1 enebular enebular 239 Dec 5 06:28 main.c
-rwxr----- 1 enebular enebular 28 Dec 5 06:27 main.sh
-rw-r--r-- 1 enebular enebular 7 Dec 5 06:28 test.txt
[root@ip-10-1-10-153:/home/enebular/enebular-runtime-agent/ports/awsiot/assets# cat test.txt
-----+
root@ip-10-1-10-153:/home/enebular/enebular-runtime-agent/ports/awsiot/assets#
まとめ(感想)
- 今回はC言語を使いましたが、ホスト上で動作する言語であれば実行可能のはずなので他の言語でも試してみたいと思います
- Node-REDのフローでは実現できない、または困難なケースに対しては今回の方法で実現できるかもしれないと思いました
- ホストが遠隔地にありコード修正できないものや複数ホストへの対応ができそうなので利用できるケースは多いかと思いました
- rootユーザー権限での設定やホスト再起動等については確認していませんが、作り込むことはできると思うので今後試してみたいと思います