以前、DropBoxとの連携記事をアップしたことがありますが、今回はS3との連携です。
AppFlowでのAWS連携もできますが、技術ブログなのでREST APIを使用したコールアウトのやり方を試してみようと思います。
Salesforceの指定ログイン情報(外部システムへの認証情報を保存する設定)を使用します。
・表示ラベル:任意の名称
・名前:任意の名称
・U R L:https://BUCKETNAME.s3.amazonaws.comのBUCKETNAMEに
設定したバケットネームを設定
・I D種別:指定ユーザ
・認証プロトコル:AWS署名バージョン4
・AWSアクセスキーI D:AWSのI A Mユーザの適切なアクセスキーを設定
・AWSシークレットキー:AWSのI A Mユーザの適切なシークレットキーを設定
・AWSリージョン:該当するリージョンを設定
※リージョン参照:https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html
・AWSサービス:s3を設定
・認証ヘッダーを生成をチェック
Getのサンプル
Getの場合は下記のようになります。
setEndpointのcalloutの後には、先ほど設定した指定ログイン情報の名前(AWS_S3)、ディレクトリ、ファイル名を指定することにより取得が可能となっています。
-
HttpRequest req = new HttpRequest();
-
req.setEndpoint('callout:AWS_S3/hogedir/hogefile.txt');
-
req.setMethod('GET');
-
Http http = new Http();
-
HttpResponse res = http.send(req);
Putのサンプル
setHeaderには送信する形式を設定します。
setBodyに送信内容を設定します。
setMethodにはPUTを設定します。
-
String bucketName = 'test';
-
String fileName = 'test.csv';
-
String csv_body = 'テスト1,テスト2,テスト3\r\nサンプル1,サンプル2,サンプル3';
-
HttpRequest req = new HttpRequest();
-
req.setEndpoint('callout:AWS_S3/' + bucketName + '/' + fileName);
-
req.setHeader('Content-Type','text/csv; charset = Shift_JIS');
-
req.setBody(csv_body);
-
req.setMethod('PUT');
-
Http http = new Http();
-
HTTPResponse res = http.send(req);
このように指定ログイン情報を使用することによって、認証が全てSalesforceで管理されるため通常なら設定しなくてはならないリモートサイト設定も省略することができます。