3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Logic AppsでAWS S3とファイル転送

Last updated at Posted at 2019-03-15

#AWS S3とAzure Blob Storage間のファイル送受信
##前提
AWS側はTransfer for SFTPを構築しておく。
SSH-Keygenで公開鍵と秘密鍵を作成しておく。
##AWS側作業
###IAM

  • ロールの作成

AmazonS3FullAccess権限を付与したロールに、「信頼関係」タブから信頼関係の編集を行う。
以下のポリシーを設定する。

 
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • ポリシーの作成

S3バケットに対するアクセス権をポリシーで設定する。

 
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListHomeDir",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::${transfer:HomeBucket}"
        },
        {
            "Sid": "AWSTransferRequirements",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Sid": "HomeDirObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::${transfer:HomeDirectory}*"
        }
    ]
}

上記のロールとポリシーは、SFTP Transfer作成後の「ユーザー」設定時に利用する。

Transfer for SFTP

画面右上の「Create Server」から構築する。設定値は以下のとおり。

  • DNS configuration → なし
  • Identity provider → Server Managed
  • Logging Role → なし
  • Tags → なし

数分でサーバーが「Online」状態になりエンドポイントが払い出される。
awst01.png

SFTPユーザーの作成

Usernameに加えて、先ほど作成した
IAMロールをAccessに、ポリシーをPolicyに設定する。
S3バケット上のホームディレクトリと
事前に作成しておいた公開鍵のアップロードも行う。
awst02.png

##Azure側作業
Logic AppsのSFTPコネクタを利用する。
SFTPコネクタには「SFTP」と「SFTP-SSH」の2種類あるが
今回は「SFTP」を利用する。

Azureストレージ → S3への送信

送信元となるストレージアカウントとBlobコンテナを作成する。
Logic Appsの「When a blob is added or modified」トリガーを利用し、
定期的にコンテナ内をウォッチしてもらう。(ここでは1分毎)に設定

azure01.png

続いて、SFTPコネクタでAWS Transfer for SFTPに接続する設定をする。
コネクタはSFTPの「Create File」を指定。
azure02.png

Folder Path に、AWS Transferで設定したユーザーのホームディレクトリ(/バケット名/ディレクトリ名)
File Name に、前ステップで取得したList of Files Name、
File Content に 前ステップで取得したFile Content
を、それぞれ指定する。

SFTPサーバーの指定は、左側のAPI Connections メニューからも行う事ができる。
azure03.png

  • Host Server Addess → Transfer for SFTPのエンドポイント
  • User Name → Transfer for SFTPで作成したユーザー名
  • Password → 秘密鍵を使うのでここは空欄
  • SSH private key → 事前に作成していた秘密鍵をそのまま貼り付け
  • SSH private key passphrase → パスワード設定していなかったので空欄
  • Port Number → 22
  • SSH Host Key Finger-print → Transfer for SFTPのユーザー管理画面で確認できるのでそのままコピペする。

以上、設定を保存して完了。

###送信できるかテスト

Logic AppsでBlobにファイルがアップされたらトリガ起動するようにしてるので
Blobをアップロードする。
azure05.png

しばらく経つと(1分以内)、Logic Appsが起動し
転送が正常終了したことがわかる。
azure06.png

AWS側のバケット内を確認すると、ちゃんとファイルが生成されている。
awst03.png

###受信できるかテスト
こんどはLogic Apps側からのgetをテストする。
トリガはタイマ起動の「Recurrence」
ファイル取得アクションは「Get file content using path」

  • File Path → AWSバケット内のファイルパスを指定
  • Infer Content Type → YES

Blobへのコピーは「Create Blob」

  • Folder path → ファイルを配置するコンテナ名
  • Blob Name → 配置するファイル名
  • Blob Content → 前アクションで取得したFile Content
    を、それぞれ指定する。以下が実際のフロー。

azure07.png

起動後、AWSバケット内のファイルが・・・
aws06.png

Azureのストレージ内にコピーされた事を確認。
azure08.png

以上、送受信が一応できる事まで確認できた。

###問題点(解決済)
Logic Appsを経由すると送受信したテキストの日本語部分(マルチバイト文字)
が文字化けしている
事が判明。
azure099.png

以下などに参考になりそうな情報は載っているが詳細未確認

解決方法が分かる方がいらっしゃいましたら教えていただけると助かります。


追記
文字化け防止方法がわかったので追記します。

Logic Appsのアクションで
送信時の Get Blob Content using Path
auzre101.png
および、受信時の Get File Conttent using Path
azure102.png
それぞれ、
Infer Content Typeの値を「No」に設定する事で(デフォルトは「Yes」)
文字化けしなくなりました。

変更後の取得したファイル(先頭のみ)

 
MASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTERMASTER
1	0006	0001		アウトドア	sysdate	SEMNT	SEMNT	1	sysdate	SEMNT	SEMNT	INSERT INTO TBM_A2240 ( LSPDAIGENRECD, LSPCHUGENRECD, LSPCHUGENRENMKN, LSPCHUGENRENM, INSTIMESTAMP, INSLOGIN, INSPGID, REVISION, UPDTIMESTAMP, UPDLOGIN, UPDPGID ) VALUES ( '0006', '0001', '', 'アウトドア', sysdate, 'SEMNT', 'SEMNT', 1, sysdate, 'SEMNT', 'SEMNT' );	UPDATE TBM_A2240 SET LSPCHUGENRENMKN = '' , LSPCHUGENRENM = 'アウトドア' , , REVISION = REVISION + 1 , UPDTIMESTAMP = sysdate , UPDLOGIN = 'SEMNT' , UPDPGID = 'SEMNT' WHERE LSPDAIGENRECD = '0006' AND LSPCHUGENRECD = '0001';	SELECT '1=' || count(*) FROM TBM_A0080 WHERE LSPDAIGENRECD = '0006' AND LSPCHUGENRECD = '0001';	0	対象
2	0006	0005		釣り	sysdate	SEMNT	SEMNT	1	sysdate	SEMNT	SEMNT	INSERT INTO TBM_A2240 ( LSPDAIGENRECD, LSPCHUGENRECD, LSPCHUGENRENMKN, LSPCHUGENRENM, INSTIMESTAMP, INSLOGIN, INSPGID, REVISION, UPDTIMESTAMP, UPDLOGIN, UPDPGID ) VALUES ( '0006', '0005', '', '釣り', sysdate, 'SEMNT', 'SEMNT', 1, sysdate, 'SEMNT', 'SEMNT' );	UPDATE TBM_A2240 SET LSPCHUGENRENMKN = '' , LSPCHUGENRENM = '釣り' , , REVISION = REVISION + 1 , UPDTIMESTAMP = sysdate , UPDLOGIN = 'SEMNT' , UPDPGID = 'SEMNT' WHERE LSPDAIGENRECD = '0006' AND LSPCHUGENRECD = '0005';	SELECT '2=' || count(*) FROM TBM_A0080 WHERE LSPDAIGENRECD = '0006' AND LSPCHUGENRECD = '0005';	0	対象
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?