【AWS Storage Gateway】S3バケットをEC2 WindowsOSにSMBマウントする方法

  • 2019年7月14日
  • 2019年7月14日
  • AWS
AWS

こんにちは。ますのです。
各種データのバックアップですが、いっそのことS3バケットに格納出来ればリソース削減になるのでは??となりまして、WindowsサーバにS3バケットをマウントする方法を模索しました!Linuxの場合はEFS使えば良さそうですので、需要はWindowsになるのかなぁと感じた次第です。

頻繁に取り出すようなデータではなく、障害発生時の最終防衛ライン的な立ち位置で扱うデータが対象です。データ転送速度は若干落ちますがわたしとしては許容範囲な結果でしたので継続利用です。

やりたいこと&構成図

・既に作成済みのEC2:WindowsServerから、内部のみに公開しているS3バケットに対してデータを配置する

マウント先のS3バケットを作成する

AWS管理コンソール>S3>バケットを作成するをクリックする

名称に関しては自身で分かるものを設定します。Windowsサーバ上からアクセスする際に利用する名称となります。

 

Storage Gatewayの作成

続いてストレージゲートウェイを作成します。

  1. ゲートウェイの種類を選択:ファイルゲートウェイを選択する
  2. ホストプラットフォームの選択:Amazon EC2を選択し、「インスタンスの起動」をクリックする
  3. ストレージゲートウェイを動かすためのEC2を作成します。
    注意!
    ・インスタンスタイプ:
    「t2.micro」にするとストレージゲートウェイが実行中になりませんでした。推奨は「m4.xlarge」ですが、私の環境では「t2.medium」で動作したので「t2 or t3.midium」で取り敢えず様子見です。
    ・ストレージ:

    ルートボリューム以外に、キャッシュデータを格納するボリュームを別途アタッチする必要があります。推奨では150GBとなっておりますが、頻繁にアクセスしない想定のため「100GB」で様子見です。
    ※ルート:80GB EBS:100GB で作成
  4. ートウェイに接続:③で作成したEC2のIPアドレスを入力します。
    ※今回はローカル環境のみで利用のため、プライベートIPを入力しました。
  5. ゲートウェイのアクティブ化:タイムゾーンとゲートウェイ名を設定し、ゲートウェイのアクティブ化を実行します。
  6. ゲートウェイのアクティブ化はローカルディスクの準備に時間がかかるため、作成まで少し時間がかかります。ローカルストレージを作成し忘れていた場合は「ローカルストレージを割り当てる必要があります」と警告文が表示されるため、キャッシュ用のローカルストレージを作成しましょう。

    ③で作成したEC2インスタンスのインスタンスタイプが低い場合、この時点でアクティブ化に失敗します。時間が立ってもステータスが「実行中」とならない場合はインスタンスタイプを上げてみましょう。

ファイル共有の作成

続いてファイル共有を作成します。このファイル共有設定によって、ストレージゲートウェイとS3バケットを紐づけます。

  1. 管理コンソール>Storage Gateway>ゲートウェイ>作成したゲートウェイを選択>ファイルの共有をクリックします。
  2. ファイル共有の設定:以下の3つを入力して次へをクリック
    ・先程作成した「マウントしたいAmazon S3バケット名」を入力
    ・サーバーメッセージブロック(SMB)を選択、
    ・先ほど作成したゲートウェイを選択
  3. Amazon S3でファイルを保存する方法の設定:デフォルト設定で次へをクリック
    ・新しいオブジェクトのストレージクラス:S3スタンダード
    ・オブジェクトメタデータ:MIMEの種類の推測、バケット所有者に完全なコントロールを付与にチェック
    ・S3バケットへのアクセス:新しいIMAロールを作成する
  4. SMB共有の設定:ゲストアクセスを選択>閉じる>ファイル共有の作成をクリック
  5. ファイル共有の作成が完了します。

ゲストアクセスの場合CLIでしか作成出来ないバグを確認。2019/7月時点では解消されましたが、コマンドライン上から作成する場合は下記を参考に実行します。

$ aws storagegateway create-smb-file-share –client-token <任意の文字列> –gateway-arn <ファイルゲートウェイの ARN> –role <IAM ロールの ARN > –location-arn arn:aws:s3:::<S3 バケット名> –default-storage-class S3_STANDARD –no-requester-pays –guess-mime-type-enabled –authentication GuestAccess –object-acl bucket-owner-full-control –no-smbacl-enabled

参考:create-smb-file-share — AWS CLI 1.16.186 Command Reference 

ファイル共有にアクセスするゲストアカウントの作成

続いてファイル共有にSMBアクセスする際のユーザ設定を行います。
ドメイン結合が出来ない環境だったので今回はゲストアカウントという方法にて対応しました。

  1. 管理コンソール>Storage Gateway>ゲートウェイ>作成したゲートウェイを選択>アクション>SMB設定の編集をクリックします。
  2. ゲストアクセス設定:Windowsからアクセスする際のパスワードを設定し、保存をクリックし完了です。

WindowsサーバからS3バケットへアクセス出来るか確認する

Windowsサーバにマウントするために、コマンドプロンプトより以下のコマンドを実行します。

Zドライブにゲストアカウントでマウントさせる場合:
net use Z: \\(EC2:IPアドレス)\(S3バケット名) /user:(ゲートウェイID)\smbguest

例)
net use Z: \\192.168.11.22\s3-bucket /user:sgw-AABB1122\smbguest

以上でアクセスが出来るようになります!
定期バックアップをrobocopyで実行したりする際にも利用出来るので、何かと使いみちはあるかなぁと思う今日このごろ。ただ、LinuxですとEFSが出てきているのでWindowsのEC2でも使いやすいものが出るor出ているのかもしれないですね。

AWS側のバグに泣かされましたが、1週間程で直してくれたので良しです!S3で出来ることがないかもう少し考えていければいいなと思います。

最新情報をチェックしよう!