MatlabComp​ilerで作成したス​タンドアローンアプリ​でのAWS S3へのデータアクセス方法について

MATLAB から Amazon S3 バケットにアクセスして、S3 上にあるバケットの存在確認およびファイルのデータを取得するスクリプトを作成しました。
MATLAB上での実行では問題なく動作し成功のメッセージボックスがでることを確認しましたが、このスクリプトをMATLAB Compilerでスタンドアローンアプリにすると失敗のメッセージボックスが出力されてしまいました。
何が原因か教えてください。
% AWSの設定
awsAccessKey = '**********';
awsSecretKey = '**********';
setenv('AWS_ACCESS_KEY_ID', awsAccessKey);
setenv('AWS_SECRET_ACCESS_KEY', awsSecretKey);
setenv('AWS_DEFAULT_REGION','ap-northeast-1');
% バケットの存在確認
if isfolder("S3上のバケットパス")
msgbox("isfolder成功")
else
msgbox("isfolder失敗")
end
% S3上にあるファイルのデータを取得
try
testData = readmatrix("S3上のファイルパス");
if ~isempty(testData)
msgbox("readmatrix成功")
else
msgbox("readmatrix失敗")
end
catch
msgbox("readmatrix失敗")
end

7 Comments

メッセージボックスだけではエラーの原因の特定ができないので、
catch ME
msgbox(ME.message)
end
のようにエラー情報の内容を表示するようにしてみてはいかがでしょうか。
和哉
和哉 on 12 Mar 2025
コメントありがとうございます。
catch MEを用いてエラー情報の内容を表示したところ以下のメッセージボックスが出力されました。
MATLAB上での実行では問題ないため、ファイル名が間違っているということはないと思います。
何か原因分かりましたらご回答お願いいたします。
和哉
和哉 on 13 Mar 2025
上記エラーの件、MATLAB Runtimeの更新により解決することができました。
当方、RuntimeにはMATLABCompilerで作成したアプリインストーラーにて同時にWebからダウンロードされる2GBほどのものを使用していましたが、今回はこれをMATLAB Runtimeのサイトからインストールできる10GBほどのフルパッケージ?のRuntimeに更新したところクラウド接続がスタンドアロンアプリでも実行できることを確認しました。
クラウド接続に必要なRuntimeの機能が不足していたのかと思いますが、Runtimeのインストール時に追加する機能を選択するなどは可能なのでしょうか?10GBではファイルサイズが重くこれを最適化できればと考えています。
Kojiro Saito
Kojiro Saito on 13 Mar 2025
@和哉さん
MATLAB RuntimeのWebページからダウンロードできるインストーラーでは、全てのコンポーネントがインストールされるためファイルサイズが大きくなってしまいます。
スタンドアロンアプリのアプリを作成する際に「for_testing」フォルダーに「requiredMCRProducts.txt」というファイルが作成され、これに書かれている35002などの番号が必要なコンポーネントになります。
スタンドアロンアプリを作って最初にインストールした際と、その後でコードを追加されたりしてコンポーネント番号が今の場合だと増えている可能性はありませんでしょうか? その場合、一度MATLAB Runtimeをアンインストールし、再度スタンドアロンアプリのインストーラー (MyAppInstaller_web.exe)を実行することで必要なコンポーネントのみをインストールすることができます。
和哉
和哉 on 13 Mar 2025
教えていただきありがとうございます。
コード編集前のコンポーネント番号がどれだけあったかは分かりませんので増えたかどうかは判断できませんが、一度Runtimeをアンインストールして再度スタンドアロンアプリのインストーラーを実行してみたところ、より少ないファイルサイズのRuntimeでアプリが実行できることを確認しました。
コード編集後にRuntimeの更新は行っていませんでしたので、クラウド接続が上手くいっていなかった時はそれが原因でコンポーネントが不足していたのではないかと思います。解決しました、ありがとうございます。
参考までに聞かせていただきたいのですが、「requiredMCRProducts.txt」を見たところ「35002 35003 35010」といった番号がありました。これはそれぞれどのようなコンポーネントなのでしょうか?分かりましたら今後のために教えていただけると助かります。
公式ではなくユーザーさんの調査結果になりますが (参考:https://jp.mathworks.com/matlabcentral/answers/780072)、下記のコマンドでコンポーネント番号からコンポーネント情報を調べることができます。
pcmn = matlab.depfun.internal.ProductComponentModuleNavigator;
pcmn.productInfo(35000)
「35002 35003 35010」はそれぞれ
35002 Graphics
35003 Non Interactive MATLAB
35010 Numerics
となります。
和哉
和哉 on 14 Mar 2025
Edited: 和哉 on 14 Mar 2025
ご返事ありがとうございます。
以前こちらの件、一度Runtimeをアンインストールしてスタンドアロンアプリのインストーラを再度実行したことで解決したとお返事しましたが、Runtimeのアンインストールが上手くいっていなかったようでやはりスタンドアロンアプリでインストールされるRuntimeでは上手く実行できませんでした。訂正します、申し訳ありません。
そこでお聞きしたいのですが、AWSのバケットに対してReadMatrixやisdir関数を使う場合(AWSとの接続を行う場合)にはどのようなコンポーネントが必要になるか分かりますでしょうか?
やはり「35002 35003 35010」の3つのコンポーネントでは足りないのではないかと思っています。
大変お手数ですが、ご回答いただければと思います。

Sign in to comment.

 Accepted Answer

Kojiro Saito
Kojiro Saito on 15 Mar 2025
Moved: Kojiro Saito on 18 Mar 2025
コンポーネント35000 (MATLAB Runtime - Core)を含めるようにしてMATLAB Runtimeのインストーラーを作ってみてはいかがでしょうか。
compiler.runtime.download % 4.4 GBのダウンロードなので少々時間が掛かります
compiler.internal.buildinstallagent(35000, 35002, 35003, 35010) % requiredMCRProducts.txtに入っていない35000を追加
MATLAB Runtimeのインストーラーが
C:\Users\ユーザー名\AppData\Local\MathWorks\installAgent\R2024b\win64\InstallAgent_f00000000000000000.zip
のようなファイル名で作成されますので、Zipを配布先のマシンにコピーし、解凍してsetup.exeを実行してMATLAB Runtimeをインストールします。
その後で「for_redistribution」にある「MyAppInstaller_web.exe」でスタンドアロンアプリのインストールを実行します。MATLAB Runtimeのインストールはスキップされます。

2 Comments

和哉
和哉 on 18 Mar 2025
Moved: Kojiro Saito on 18 Mar 2025
ご教授いただきありがとうございます。
上記していただいたように、コンポーネント35000 (MATLAB Runtime - Core)を含めたMATLAB Runtimeでインストールし直してみたところ、スタンドアロンアプリを実行できることを確認しました、ありがとうございました。
Kojiro Saito
Kojiro Saito on 18 Mar 2025
Moved: Kojiro Saito on 18 Mar 2025
@和哉さん
確認ありがとうございました。解決して良かったです。
一旦上記のコメントを回答に移動させますので、回答の採用 (accept)の処理を実行いただけますでしょうか。
コンパイル時にコンポーネント35000がrequiredMCRProducts.txtに含まれていないのはそもそも挙動として不自然なので、こちらはバグ報告しておきます。

Sign in to comment.

More Answers (0)

Products

Release

R2024a

Asked:

on 12 Mar 2025

Moved:

on 18 Mar 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!