

# Amazon EC2 への S3 ファイルシステムのマウント
<a name="s3-files-mounting"></a>

EC2 インスタンスに S3 ファイルシステムをマウントするには、S3 Files マウントヘルパーを使用する必要があります。マウントヘルパーを使用すると、サポートされているディストリビューションを実行している EC2 インスタンスに S3 ファイルシステムをマウントできます。ファイルシステムをマウントするとき、マウントヘルパーは `s3files` という新しいネットワークファイルシステムタイプを定義します。これには Linux の標準的な `mount` コマンドと完全な互換性があります。マウントヘルパーは、EC2 Linux インスタンスの `/etc/fstab` 設定ファイルのエントリを使用して、インスタンスブート時に自動的にマウントする S3 ファイルシステムのマウントもサポートしています。マウントヘルパーは、S3 Files クライアント (amazon-efs-utils) のインストール時にインストールされるオープンソースのツールコレクションの一部です。

![S3 バケット、S3 ファイルシステム、Amazon EC2 インスタンス間のデータフローを示す図。](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/S3Files_EC2_dataflow.png)


## EC2 インスタンスにマウントするための前提条件
<a name="s3-files-mounting-prereqs"></a>
+ 少なくとも 1 つのマウントターゲットが使用可能な S3 ファイルシステムがあります。
+ お客様の EC2 インスタンスは、ファイルシステムのマウントに使用するマウントターゲットと同じアベイラビリティーゾーンにあります。
+ S3 Files に必要なアクセス許可を持つ IAM インスタンスプロファイルが EC2 インスタンスにアタッチされています。詳細については、「[ファイルシステムを AWS コンピューティングリソースにアタッチするための IAM ロール](s3-files-prereq-policies.md#s3-files-prereq-iam-compute-role)」を参照してください。
+ 必要な [セキュリティグループ](s3-files-prereq-policies.md#s3-files-prereq-security-groups) を設定しました。
+ EC2 インスタンスに amazon-efs-utils パッケージをインストールしました。詳細については、「[S3 Files クライアント](s3-files-prereq-policies.md#s3-files-prereq-client)」を参照してください。

## マウントヘルパーの仕組み
<a name="s3-files-mounting-how-it-works"></a>

マウントコマンドを発行すると、マウントヘルパーは次のアクションを実行します。
+ EC2 インスタンスプロファイルから IAM 認証情報を取得します。
+ efs-proxy プロセスを初期化して、マウントターゲットへの TLS 暗号化接続を確立します。
+ TLS マウントの状態をモニタリングする amazon-efs-mount-watchdog スーパーバイザープロセスを開始します。このプロセスは、S3 ファイルシステムが初めてマウントされたときに自動的に開始されます。
+ 指定されたマウントポイントにファイルシステムをマウントします。

マウントヘルパーはファイルシステムとの通信に TLS バージョン 1.2 を使用します。TLS の使用には、信頼された Amazon 認証機関によって署名された証明書が必要です。暗号化の動作の詳細については、[S3 Files のセキュリティ](s3-files-security.md) を参照してください。

マウントヘルパーは、S3 Files 用に最適化された次のマウントオプションを使用します。


| オプション | 値 | 説明 | 
| --- | --- | --- | 
| nfsvers | 4.2 | NFS プロトコルバージョン。 | 
| rsize | 1048576 | NFS クライアントが各ネットワーク読み取りリクエストで送信できるデータの最大バイト数を 1048576 (1 MB) に設定し、利用可能な最大値にすることで、パフォーマンスの低下を防ぎます。 | 
| wsize | 1048576 | NFS クライアントが各ネットワーク書き込みリクエストで送信できるデータの最大バイト数を 1048576 (1 MB) に設定し、利用可能な最大値にすることで、パフォーマンスの低下を防ぎます。 | 
| hard | — | NFS リクエストがタイムアウトした後の NFS クライアントのリカバリ動作を設定し、サーバーが応答するまで NFS リクエストを無期限に再試行し、データの整合性を確保します。 | 
| timeo | 600 | NFS クライアントがレスポンスを待機するのに要するタイムアウト値を設定してから、NFS リクエストを 600 デシ秒 (60 秒) に設定し、パフォーマンスの低下を防ぎます。 | 
| retrans | 2 | NFS クライアントが、さらなるリカバリアクションを試行する前に、リクエストを再試行する回数を 2 回に設定します。 | 
| noresvport | — | ネットワーク接続が再確立された時に、新しい非特権の TCP 送信元ポートを使用するように、NFS クライアントに指示します。noresvport を使用すると、再接続やネットワーク回復イベントの後も、ファイルシステムの可用性が中断されることはありません。 | 

さらに、S3 ファイルシステムをマウントするとき、マウントヘルパーは `tls` および `iam` マウントオプションを自動的に使用します。S3 Files では、接続を確立するためにこれらのオプションが必要です。これは、S3 Files は常に TLS 暗号化と IAM 認証を使用してファイルシステムをマウントするためで、これらを無効にできないためです。

## EC2 インスタンスに S3 ファイルシステムをマウントする方法
<a name="s3-files-mounting-steps"></a>
+ EC2 コンソールの Secure Shell (SSH) または EC2 Instance Connect を介して EC2 インスタンスに接続します。詳細については、「[EC2 インスタンスに接続する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)」を参照してください。
+ 以下のコマンドを使用して、ファイルシステムのマウントポイントとして使用するディレクトリ `/mnt/s3files` を作成します。

  ```
  sudo mkdir /mnt/s3files
  ```
+ S3 ファイルシステムをマウントします。

  ```
  FS="{{{YOUR_FILE_SYSTEM_ID}}}"
  sudo mount -t s3files $FS:/ /mnt/s3files
  ```
+ ファイルシステムがマウントされていることを確認します。

  ```
  df -h /mnt/s3files
  ```

  次のようなレスポンスが表示されます。

  ```
  Filesystem      Size  Used Avail Use% Mounted on
  {{{s3files-dns}}}    8.0E  129M  8.0E   1% {{{path/to/mount}}}
  ```

  ローカルマウントポイントの内容を一覧表示することで、ファイルシステムのマウントを検証し、マウントオプションを調べることもできます。マウントが成功すると、このコマンドは指定されたディレクトリのマウントオプションを含むマウントの詳細を表示します。

  ```
  findmnt -T /mnt/s3files
  ```

マウントコマンドの詳細については、[GitHub のドキュメント](https://github.com/aws/efs-utils/blob/master/README.md#mountefs)を参照してください。

標準ファイルシステムオペレーションを使用して、S3 オブジェクトをローカルのマウントパスのファイルとして読み書きできるようになりました。S3 バケットにオブジェクトがある場合は、次のコマンドを使用して、オブジェクトをファイルとして表示できます。

```
ls /mnt/s3files
```

[CloudWatch メトリクス](s3-files-monitoring-cloudwatch.md)を使用して、ファイルシステムのストレージ、パフォーマンス、クライアント接続、同期エラーをモニタリングできます。

## アクセスポイントを使用して EC2 インスタンスに S3 ファイルシステムをマウントする方法
<a name="s3-files-mounting-access-points-inline"></a>

アクセスポイントを使用してファイルシステムをマウントする場合、mount コマンドには `access-point-id` マウントオプションが含まれます。

```
sudo mount -t s3files -o accesspoint={{access-point-id}} {{file-system-id}} /mnt/s3files
```

各パラメータの意味は次のとおりです。
+ {{access-point-id}} は、アクセスポイントの ID です。
+ {{file-system-id}} は、S3 ファイルシステムの ID です。

## EC2 インスタンスの起動時に S3 ファイルシステムを自動的にマウントする
<a name="s3-files-mounting-auto"></a>

`/etc/fstab` ファイルを更新することで、インスタンスの起動時または再起動時に S3 ファイルシステムを自動的にマウントするように EC2 インスタンスを設定できます。`/etc/fstab` ファイルにはファイルシステムに関する情報が含まれており、オペレーティングシステムが起動時にマウントするファイルシステムを決定するために使用されます。

**警告**  
ファイルシステムを自動的にマウントする場合、ネットワークファイルシステムを識別するために使用された `_netdev` オプションを使用します。`_netdev` が見つからない場合、EC2 インスタンスはレスポンスを停止する可能性があります。この結果は、コンピューティングインスタンスがネットワークを開始後、ネットワークファイルシステムを初期化する必要があるためです。詳細については、「[自動マウントが失敗してインスタンスがレスポンスしない](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/builtInFS-fstab-issues.html)」を参照してください。

マウントヘルパーを使用して Amazon EC2 インスタンスを設定することで、インスタンスの起動時に自動的に S3 ファイルシステムをマウントできます。
+ S3 ファイルシステムのエントリで EC2 の `/etc/fstab` ファイルを更新します。
+ EC2 インスタンス起動ウィザードを使用して新しい EC2 インスタンスを作成するときに、S3 ファイルシステムをアタッチします。

### /etc/fstab ファイルを更新する
<a name="s3-files-mounting-auto-fstab"></a>

EC2 Linux インスタンスの `/etc/fstab` を更新すると、インスタンスの再起動時に、インスタンスでマウントヘルパーを使用して自動的に S3 ファイルシステムを再マウントできます。この設定を行うには、次の手順を実行します。
+ [EC2 インスタンスに接続します](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。
+ `/etc/fstab` ファイルをエディタで開き、ファイルに次の行を追加します。

  ```
  {{file-system-id}}:/ {{mount-directory}} s3files _netdev 0 0
  ```

  説明は以下のとおりです。
  + {{file-system-id}} は、S3 ファイルシステムの ID です (例: `fs-0123456789abcdef0`)。
  + {{mount-directory}} は EC2 インスタンスのマウントポイントディレクトリです (例: `/mnt/s3files`)。
  + `_netdev` は、ファイルシステムがネットワークファイルシステムであることを指定し、インスタンスがマウントを試みる前にネットワークが利用可能になるまで待機するようにします。
+ ファイルを保存し、エディタを閉じます。
+ fstab に記載されたすべてのファイルシステムをマウントして、fstab エントリをテストします。

  ```
  sudo mount -a
  ```
+ ファイルシステムがマウントされていることを確認します。

  ```
  findmnt -T {{mount-directory}}
  ```

**nofail オプションの使用**

本番環境の fstab エントリに `nofail` オプションを追加することをお勧めします。このオプションを使用すると、ファイルシステムのマウントに失敗した場合でもインスタンスを起動できます。

```
{{file-system-id}}:/ {{mount-directory}} s3files _netdev,nofail 0 0
```

**アクセスポイントを使用した自動マウント**

S3 Files アクセスポイントを使用して自動的にマウントするには、`accesspoint` オプションを含めます。

```
{{file-system-id}}:/ {{mount-directory}} s3files _netdev,accesspoint={{access-point-id}} 0 0
```

**サブディレクトリを使用した自動マウント**

ファイルシステムの特定のサブディレクトリを自動的にマウントするには、パスを指定します。

```
{{file-system-id}}:/path/to/directory {{mount-directory}} s3files _netdev 0 0
```

### EC2 インスタンス起動ウィザードの使用
<a name="s3-files-mounting-auto-wizard"></a>
+ Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。
+ [**インスタンスの作成**] を選択してください。
+ AWS コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動するには、このドキュメントに従ってください。**[インスタンスを起動]** を選択する前に、次の手順に示すように、ネットワークを設定し、S3 ファイルシステムを追加します。
+ **[ネットワーク設定]** でサブネットを選択していることを確認します。
+ デフォルトのセキュリティグループを選択して、EC2 インスタンスが S3 ファイルシステムにアクセスできることを確認します。このセキュリティグループを使用して、Secure Shell (SSH) で EC2 インスタンスにアクセスすることはできません。SSH によるアクセスについては、後でデフォルトのセキュリティを編集し、SSH を許可するルールまたは SSH を許可する新しいセキュリティグループを追加できます。以下の設定を使用できます。
  + タイプ: SSH
  + [Protocol]: TCP
  + ポート範囲: 22
  + 出典: Anywhere 0.0.0.0/0
+ **[ストレージ]** セクションで、**[ファイルシステム]** を選択し、**[S3 Files]** を選択します。
+ ファイルシステムのドロップダウンに、ネットワーク設定で以前に選択したサブネットに基づいて、アベイラビリティーゾーンのファイルシステムが表示されます。マウントする S3 ファイルシステムを選択します。ファイルシステムがない場合は、[新しいファイルシステムを作成する] を選択して新しいファイルシステムを作成します。
+ ファイルシステムをマウントする EC2 インスタンスのローカルマウントパスを入力します (例: `/mnt/s3files`)。
+ ファイルシステムをマウントし、fstab に追加するコマンドが生成されます。コマンドをユーザーデータに追加するか、起動後に EC2 インスタンスで手動で実行するかを選択できます。その後、EC2 インスタンスは、起動時および再起動されるたびに S3 ファイルシステムをマウントするよう設定されます。
+ [**インスタンスの作成**] を選択してください。

## 別の VPC からの S3 ファイルシステムのマウント
<a name="s3-files-mounting-cross-vpc"></a>

VPC ピアリング接続またはトランジットゲートウェイを使用して VPC を接続する場合、ある VPC にある Amazon EC2 インスタンスは、別の VPC にある S3 ファイルシステムにアクセスできます。

トランジットゲートウェイは、VPC とオンプレミスネットワークを相互接続するために使用できるネットワークの中継ハブです。Transit Gateways の詳細については、*Amazon VPC Transit Gateways Guide*の [Transit Gatewayで始める](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html) を参照してください。VPC ピアリング接続は、2 つの VPC 間のネットワーク接続です。このタイプの接続では、インターネットプロトコルバージョン 4 (IPv4) またはインターネットプロトコルバージョン 6 (IPv6) のプライベートアドレスを使用して、2 つの VPC 間でトラフィックをルーティングできます。VPC ピアリングを使用して、同じ AWS リージョン内または AWS リージョン間の VPC を接続できます。VPC ピアリングについての詳細については、「*Amazon VPC ユーザーガイド*」の「[VPC ピア機能とは](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)」を参照してください。

別の VPC からファイルシステムをマウントする場合は、マウントターゲットを手動で解決する必要があります。対応するアベイラビリティーゾーンのマウントターゲットの IP アドレスを次のように使用し、{{mount-target-ip-address}}、{{file-system-id}}、{{mount-directory}} を自分の値に置き換える必要があります。

```
sudo mount -t s3files -o mounttargetip={{mount-target-ip-address}} {{file-system-id}} {{mount-directory}}
```

ファイルシステムの高可用性を確保するために、NFS クライアントと同じアベイラビリティーゾーンにあるマウントターゲットの IP アドレスを常に使用することをお勧めします。

または、DNS サービスとして Amazon Route 53 を使用することもできます。Route 53 で、プライベートホストゾーンとリソースレコードセットを作成して、別の VPC からマウントターゲット IP アドレスを解決できます。手順の詳細については、「*Amazon Route 53 デベロッパーガイド*」の「[プライベートホストゾーンの使用](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)」を参照してください。

別の VPC からのマウントの詳細については、「[GitHub ReadMe](https://github.com/aws/efs-utils/blob/master/README.md)」を参照してください。

## 別の AWS リージョンからの S3 ファイルシステムのマウント
<a name="s3-files-mounting-cross-region"></a>

ファイルシステムとは別の AWS リージョンにある VPC から S3 ファイルシステムをマウントする場合は、`s3files-utils.conf` ファイルを編集する必要があります。`/etc/amazon/efs/s3files-utils.conf` で、次の行を見つけます。

```
#region = us-east-1
```

行のコメントを解除し、us-east-1 にない場合、ファイルシステムが配置されているリージョンの ID の値を置換します。

次に、設定でリージョンを変更した後、マウントコマンドでマウントターゲット IP を指定する必要があります。

```
sudo mount -t s3files -o mounttargetip={{mount-target-ip-address}} {{file-system-id}} {{mount-directory}}
```

## S3 ファイルシステムのアンマウント
<a name="s3-files-mounting-unmount"></a>

Linux を実行する EC2 インスタンスに接続されている S3 ファイルシステムをアンマウントするには、次のように `umount` コマンドを使用します。

```
umount {{mount-directory}}
```

他の `umount` オプションを指定しないことをお勧めします。デフォルトと異なる `umount` オプションを設定しないでください。`findmnt` コマンドを実行すると、S3 ファイルシステムがアンマウントされたことを確認できます。アンマウントが成功した場合、マウントディレクトリの `findmnt` コマンドは出力を生成しません。