【AWS を使い倒す!】S3を利用してクライアントとファイルを共有する方法
こんにちは。オンサイトのエンジニア、ふけはらです。
今回は「AWSのS3を利用してファイルを共有する方法」について説明します。
弊社で行っているECサイトの運営代行業務で「クライアントとのデータの受け渡しにFTPサーバを利用したい」という要望があがりました。
FTPサーバを構築することもできますが、コストやメンテナンスの面から、AWSのS3を利用することにしました。「ファイルをアップロードした際にメール通知したい」という要望もありましたが、LambdaとSESと連携することで、手軽に実現することができました。
目次
なぜS3を利用することにしたのか ーAWSの特徴
コストやメンテナンスなどを考慮し、FTPサーバではなくAWSのS3を利用することにしました。
①メンテナンスコスト
AWS S3を利用することでサーバのメンテナンスコストを抑えることができます。
VPSやAWSのEC2を利用すれば、FTPサーバを構築することは可能です。vstpdというソフトウェアをインストールすることでFTPサーバとして動作させることができます。しかし、サーバを運用する場合は以下のようなメンテナンスや運用にかかるコストについても考慮する必要があります。
- 利用しているOSやソフトウェアに脆弱性が見つかった場合のアップデート対応
- サーバが正常に動作しているかの監視
- 冗長化、データのバックアップはどうするか
S3はストレージサービスで、データの保存場所を提供してくれます。
99.999999999% の堅牢性と、99.99% の可用性が提供されるように設計されています。
また、脆弱性対応などもAWSが面倒みてくれるので、ユーザで意識する必要ありません。安心して運用することができます。
②ランニングコスト
AWS S3はFTPサーバを構築するより、安価に利用できます。
スペックの低いVPSを利用する場合でも、500 ~ 1000円/月 程度の費用がかかると思います。S3はデータ容量1GBあたり0.025ドルで利用可能です[※1]。VPSを借りてFTPサーバを構築するよりも費用を抑えることができます。
[※1]: 標準タイプ、東京リージョンの場合。
S3の利用料金は、データ容量以外に、リクエスト回数・データ転送量なども発生しますが、それらを含めてもとても安価に運用できます。
③メール通知
今回は、ファイルがアップロードされたタイミングでメール通知を行いたい、という要望もありました。
AWS Lambdaを利用すれば、S3にファイルが保存されたタイミングでメールを送信する処理を実行できます。
④S3に直接アップロードできるFTPクライアントの存在
エンジニアから見て、実装が容易で運用が楽だといっても、実際に利用するユーザが使いにくければ意味がありません。
しかし、S3にアクセスできるFTPクライアントソフトが存在します。WindowsならWinSCP、MacならCyberduckがS3への接続に対応しています。
これらを利用することでFTPサーバと同じような操作で、S3へファイルのアップロード・ダウンロードが行えます。
AWSのS3を利用した理由
サーバーのメンテナンス・脆弱性への対応が不要!
FTPサーバを構築するよりも利用料が安い!
S3にアクセスできるFTPクライアントソフトもあるからユーザーも使いやすい!
AWS上に環境を構築する
では実際にどのように構築するのかを説明します。
①バケットの作成
②S3へのアクセスを許可するユーザの作成
こちらの順番で進めていきましょう。
① [S3] バケットの作成
S3にアクセスし、[バケット名]を入力して、バケットを作成します。作成時の各種設定はデフォルトのままでも良いと思いますが、状況に合わせて必要があれば変更してください。
▼
バケットが作成されたことを確認しましょう。
▼
後のIAMポリシーの作成時に、S3のARNが必要になるのでコピーしておきましょう。
② [IAM] S3へのアクセスを許可するユーザの作成
作成したバケットにアクセス可能なIAMポリシーを作成します。
Resourceには作成したバケットのARNを指定します。下記の例では、sample-bucket-on-sightバケットのdir1, dir2ディレクトリの配下のファイルに対して権限を与えています。バケット全体に権限を与えたい場合は、”arn:aws:s3:::sample-bucket-on-sight/*”という風に指定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::sample-bucket-on-sight"
]
},
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": [
"arn:aws:s3:::sample-bucket-on-sight/dir1/*",
"arn:aws:s3:::sample-bucket-on-sight/dir2/*"
]
}
]
}
▼
IAMユーザを作成する際には、[アクセスの権限]は[プログラムによるアクセス]を選択して、上記で作成したIAMポリシーを付与します。
FTPクライアントでS3に接続するには、アクセスキーとシークレットアクセスキーが必要です。
IAMユーザの作成完了画面で、アクセスキーとシークレットアクセスキーが記載されたCSVファイルがダウンロードできるので、忘れずに保存しておきましょう。
FTPクライアントでS3に接続する方法
先述しましたが、S3にアクセスすることができるFTPクライアントソフトが存在します。
Windowsなら「WinSCP」、Macであれば「Cyberduck」です。
ここからはそれぞれの接続方法を紹介します。
【Windowsの場合】WinSCPの接続設定
[転送プロトコル]でAmazon S3を選択します。[ホスト名]と[ポート番号]は自動で入力されます。
IAMユーザのアクセスキーとシークレットアクセスキーを入力します。
▼
[設定]から[高度なサイトの設定]を開きます。[リモートディレクトリ]には、S3のバケット名を入力します。
【Macの場合】Cyberduckの接続設定
接続先の種別で、Amazon S3を選択すると、[サーバ][ポート]の項目は自動で入力されます。[アクセスキーID][シークレットアクセスキー]をそれぞれ入力します。[パス]の欄で、バケット名を指定します。
最後に
今回の記事では、AWSのS3を利用してファイルを共有する方法について説明しました。次回の記事で、S3にファイルがアップロードされたタイミングでメールを送信する方法について説明いたします。
今後もAWSの活用方法を発信していきます!皆さんもAWSを使い倒しましょう!
オンサイトでは、共に働いてくれるエンジニアを募集中です!ぜひ下記採用ページからお気軽にご連絡ください!
エンジニア
2018年に中途入社。
Ruby, Rails, AWSなどを利用して、社内向けの業務アプリを開発しています。
兼務でシステム機器やSaasの管理など情シス的な仕事も担当。