S3にファイルをアップロードしたら自動でFTPサーバ(EC2)にアップロードする機能

こんにちは、おてらです。

この記事の続きです。

スポンサーリンク

やりたかったこと

S3にファイルをアップロードしたらそのファイルを自動的にEC2で構築したFTPサーバにアップロードさせたかった。

もう少しだけ詳しく話すと、アプリケーション側で生成したCSVファイルを別のサーバで読み込むために生成~別サーバへのアップロードを自動化させる必要があった。

アプリケーション側でそのままFTPサーバにつなげてしまえばいいのでは?とも思ったんですが、アプリケーション側にその機能まで持たせる必要はないし、ここがボトルネックになってアプリケーション本来の機能に支障が出てしまったらいけないので分離しました。

構成図

ざっくりこんな感じです。

クライアント(アプリケーション)側からS3にファイルをアップロードする処理は別の人が担当したので僕はコード書いてません。

僕が担当したのはS3にアップロードされたことをトリガーに、そのファイルを取得してLambdaから同一VPC内に存在するFTPサーバにファイルをアップロードする処理です。

完成品

こちらにどーん。

ポイントはLambdaの設定で、LambdaをEC2と同じVPCに所属させることと、LambdaにVPCとS3に対するアクセス権を持ったRoleを設定することです。

VPCに関しては新たにVPCを作ってあげれば済みますが、VPCを作る際にS3へのエンドポイントを作る必要があります。

 

これで一応OKのはず。

懸念点は、対向のFTPサーバがダウンしてた場合のリトライ処理をどうしようかなーという点です。

毎回処理が終わるたびにバックアップ用のバケットに移すようにしてるんですが、正常に処理が終わらなかった場合、元のS3バケットにファイルが残ったままになるので最初の処理をバケットに存在しているオブジェクトを全てFTPサーバに転送する、といった処理にするかなとか。

でもそうしたらS3にアップロードするというトリガーが発生するまでファイル残ったままだよな~とか別の懸念も。

なかなか難しい。

 

ちなみにPythonのログ出力に関して先日このQiita記事を読んだのでちょっと実践してみました。

Pythonでコードを書くときは意識したいところです。

フォローする

スポンサーリンク