足立区在住SEのブログ

足立区在住のSE、中小企業診断士のブログです。機械学習、自然言語処理など。

OutSystemsでAWS S3を操作する。

外部システムとのファイル連携でAWSのS3を使っているため、OutSystemsからS3を操作しています。
FORGEからインストールをした「AdvancedAmazonS3」モジュールを使っています。

f:id:adachinose:20170627214551j:plain

「AdvancedAmazonS3」には、S3FileとAmazonTokenというStructureが用意されているので
そこに必要なパラメータをセットします。

S3File
  Bucket=バケット名
  SubFolder=サブフォルダ名
  Key=ファイル名

AmazonToken
  AccessKey=アクセスキー
  SecretKey=シークレットアクセスキー

上記をセットしてFetchFileを呼び出すと
戻り値のS3File.Contentでファイルのバイナリーデータを取得できました。

パラメータのS3File.ContentにバイナリデータをセットしてSaveFileを呼び出すと
S3にファイルを保存することができました。


できてしまうととても簡単なのですが
これを作っていて引っかかったのが、パラメータ「Key」の指定の仕方でした。

AWS Tools for Windows PowerShell」でS3を操作するときは

Write-S3Object -BucketName "BucketName" -File "c:\temp\test.txt" -Key "/SubFolder/FileName"

のような感じで、Keyにサブフォルダ名とファイル名を一緒に渡せたのですが

「AdvancedAmazonS3」では一緒に渡すとNGで、分けて渡す必要がありました。

× Key="/SubFolder/FileName"

○ SubFolder="SubFolder"(※末尾にスラッシュを付けない)
  Key="FileName"

この渡し方が書いてあるドキュメントを見つけられず
パラメータの渡し方をいろいろ試してやっとのことでS3にアクセスできました。

あと、FetchFileを呼んで指定したファイルがないとExceptionが発生してErrorログが出るため
ファイルの存在チェックのたびにErrorログが出てしまい、存在チェックをあきらめました。
Errorログを出さないようにする方法がわかればよかったのですが。。