MATLABからAW​Sにテキストファイル​を送信したい

MATLABからAWSのAmazonS3にテキストファイルを送信したいと考えています.
AWSでアクセスキー,アクセスシークレットキーを発行し,MATLABのコードに入力し,
上記のサイトをもとに通信しようと考えたのですが,うまくいきません.
そもそもこのサイトが通信するために必要なページなのかも分からなくなってきました.
もし,通信した経験がある方やノウハウをご存じの方がいらっしゃったら教えていただきたいです.
よろしくお願いいたします.

2 Comments

Kojiro Saito
Kojiro Saito on 27 Jul 2020
S3からのデータ読み書きを行うには、上記のドキュメントでの設定が必要になります。
MATLABでどのようなコマンドを実行してどのようなエラーが出ているか、S3に関する部分だけでも抜粋してお教えいただくことはできますでしょうか?
ryota arai
ryota arai on 27 Jul 2020
コードは以下です.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
filename = 'C:\Users\wellness_root\Downloads\test1.txt';
setenv('AWS_ACCESS_KEY_ID', '-----------------');
setenv('AWS_SECRET_ACCESS_KEY', '------------------------------');
% ds = tabularTextDatastore('s3://wellness1resized/test.txt');
ds = tabularTextDatastore('s3://buckets/wellness1resized/test1/','TreatAsMissing', 'NA', 'SelectedVariableNames', {'ArrDelay'});
tt = ds;
tt = sortrows(rmmissing(tt));
write('s3://wellness1resized/test3/',tt);
% ↑データを書き込むフォルダの指定(空または存在しないフォルダーでなければならない)
% データを読み戻すには、関数 datastore を使用
ds = datastore('s3://wellness1resized/test3');
% ↑AWSに書き込み先とファイル名の指定
tt = tall(ds);
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
S3にフォルダの作成は出来ているのですが,S3にテキストファイルを送ることが出来ません.
他に調べても全く実現出来そうなヒントなどが見つかりません.よろしくお願いいたします.

Sign in to comment.

 Accepted Answer

Kojiro Saito
Kojiro Saito on 30 Jul 2020

0 votes

関数writeはtall配列を書き込む関数で、datastoreを直接書き込むことができません。
tt = ds;
のところを
tt = tall(ds);
にすればS3にファイルが書き込まれると思います。

4 Comments

ryota arai
ryota arai on 2 Aug 2020
具体的には,MATLABで作り出したtest1.txtというテキストファイルをS3のtest3フォルダに送信したいのですが,
array_r1_00001_snapshot_0x1.mat
というファイルが生成され,そのファイルの中には3や5などのtest1.txtに書き込んである数値とは異なる数値が入っています.これは正しいのでしょうか?
PC上に存在するテキストファイルを送信するにはどのようにコードを追加してパスを指定すればMATLABのコードでS3に送信できますか?
なお,お返事を頂きました内容をもとにコードを変更しました.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
A = 10;
writematrix(A,'test1.txt','Delimiter',';') %test1.txtに10という数値を書き込む
setenv('AWS_ACCESS_KEY_ID', '----------------------------');
setenv('AWS_SECRET_ACCESS_KEY', '----------------------------------------');
ds = tabularTextDatastore('s3://ーーーーーー/test.txt');
tt = tall(ds);
tt = sortrows(rmmissing(tt));
write('s3://ーーーーーーーーーー/test3/',tt);
% データを読み戻すには、関数 datastore を使用
ds = datastore('s3://ーーーーーーーーーー/test3');
tt = tall(ds);
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
以上,何卒お返事の程よろしくお願いいたします.
writeはtall配列のチェックポイントファイルですので、大容量データを前処理などして、後で使い回すときには向いているのですが、テキストファイルを送信する場合だけには不向きです。
こちらがR2020aまでのS3に対応している関数ですが、お使いのバージョンがR2020aなので、copyfileかwritematrix/writetableを使う方法が良いと思います。
下記の方法でいかがでしょうか?
A = 10;
writematrix(A,'test1.txt','Delimiter',';') %test1.txtに10という数値を書き込む
setenv('AWS_ACCESS_KEY_ID', '----------------------------');
setenv('AWS_SECRET_ACCESS_KEY', '----------------------------------------');
% テキストファイルのプッシュ
[status,msg,msgID] = copyfile('test1.txt', 's3://------/test3');
または、writematrixやwritetableで直接S3に書き込む方法もあります。
writematrix(A,'s3://------/test3/test1.txt','Delimiter',';')
ryota arai
ryota arai on 4 Aug 2020
S3に書き込めました!ありがとうございます!!
Kojiro Saito
Kojiro Saito on 5 Aug 2020
良かったです。もしよろしければ回答の採用をしていただけると幸いです。

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2020a

Community Treasure Hunt

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

Start Hunting!