

# Amazon EC2 インスタンスでの Amazon S3 の使用
<a name="AmazonS3"></a>

 Amazon Simple Storage Service (Amazon S3) は業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。Amazon S3 を使用して、データレイク、ウェブサイト、バックアップ、ビッグデータ分析など、さまざまなユースケースの任意の量のデータを Amazon EC2 インスタンスから、またはインターネット経由でどこからでも保存および取得できます。詳細については「[Amazon S3 とは](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)」を参照してください。

Amazon EC2 インスタンスから Amazon S3 データにアクセスする方法は 2 つあります:
+ **ファイルアクセス** — [Amazon S3 ファイル](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files.html)を使用して、インスタンスでの S3 バケットを高性能ファイルシステムとしてマウントします。
+ **オブジェクトアクセス** – [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/)、AWS CLI、AWS SDK、または wget などのツールを使用して、S3 との間でオブジェクトをコピーします。

## Amazon S3 ファイルによるファイルアクセス
<a name="S3FilesAccess"></a>

Amazon S3 Files は、S3 汎用バケットをコンピューティングインスタンスでの高性能ファイルシステムとしてマウントできるサーバーレスファイルシステムです。S3 ファイルでは、ローカルマウントパスでの読み取りと書き込みなどの標準ファイルシステムオペレーションを使用して、S3 オブジェクトにファイルとしてアクセスできます。

S3 ファイルシステムは、起動時、または実行中のインスタンスに対して後から、EC2 インスタンスにマウントできます。

**前提条件**

EC2 インスタンスで S3 ファイルをセットアップする前に、以下があることを確認してください:
+ 使用可能な状態の S3 ファイルシステムと少なくとも 1 つのマウントターゲット。S3 ファイルシステムの作成の詳細については、「*Amazon S3 ユーザーガイド*」の「[Amazon S3 ファイルの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files.html)」を参照してください。
+ アタッチされたインスタンスプロファイルがある Amazon EC2 インスタンス。ファイルシステムをマウントするために必要なアクセス許可の詳細については、「*Amazon S3 ユーザーガイド*」の「[IAM ロールとポリシー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-iam)」を参照してください。
+ インスタンスとファイルシステムのマウントターゲット間の NFS トラフィック (ポート 2049) を許可するセキュリティグループ。必要なセキュリティグループ設定の詳細については、「*Amazon S3 ユーザーガイド*」の「[セキュリティグループ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-security-groups)」を参照してください。

**EC2 コンソールを使用して起動時に EC2 インスタンスにファイルシステムをマウントするには**

1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. **[インスタンスを起動]** を選択してください。

1. **[Network settings]** (ネットワーク設定) で、次の操作を行います：

   1. **[編集]** を選択します。

   1. [**Subnet (サブネット)**] で、サブネットを選択してください。

   1. デフォルトのセキュリティグループを選択して、EC2 インスタンスが S3 ファイルシステムにアクセスできることを確認します。このセキュリティグループを使用して、Secure Shell (SSH) で EC2 インスタンスにアクセスすることはできません。SSH によるアクセスについては、後でデフォルトのセキュリティグループを編集し、SSH を許可するルールを追加するか、SSH を許可する新しいセキュリティグループを追加できます。以下の設定を使用できます。

      1. **タイプ:** SSH 

      1. [**Protocol**]: TCP 

      1. **ポート範囲:** 22 

      1. **出典:** Anywhere 0.0.0.0/0

1. [**ストレージの設定**] で、次の作業を行います:

   1. [**ファイルシステム**] で、[**S3 Files**] を選択します。

   1. **[Add shared file system]** (共有ファイルシステムの追加) を選択します。

   1. [**S3 ファイルシステム**] では、ファイルシステムは、ネットワーク設定で選択したサブネットに基づいて、アベイラビリティーゾーンに表示されます。マウントする S3 ファイルシステムを選択します。ファイルシステムがない場合は、[**新しいファイルシステムを作成する**] を選択して新しいファイルシステムを作成します。

   1. ファイルシステムをマウントする EC2 インスタンスのローカルマウントパスを入力します (例: `/mnt/s3files`)。

   1. ファイルシステムをマウントし、fstab に追加するコマンドが生成されます。このコマンドは、[**高度な詳細**] の [**ユーザーデータ**] フィールドに追加できます。その後、EC2 インスタンスは、起動時および再起動されるたびに S3 ファイルシステムをマウントするよう設定されます。これらのコマンドは、起動後に EC2 インスタンスで実行することもできます。

1. [**高度な詳細**] で、インスタンスプロファイルをインスタンスにアタッチします。IAM ロールには、ファイルシステムをマウントし、S3 バケットにアクセスするためのアクセス許可がある必要があります。必要なアクセス許可の詳細については、「*Amazon S3 ユーザーガイド*」の「[IAM ロールとポリシー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-iam)」を参照してください。

1. **[インスタンスを起動]** を選択してください。

   インスタンスの起動後、必要なソフトウェアユーティリティがインストールされ、ファイルシステムがマウントされます。ローカルマウントパスに移動することで、ファイルシステムを表示できます。

**起動後に EC2 インスタンスにファイルシステムをマウントするには**

1. Secure Shell (SSH) を介して、または EC2 コンソールで EC2 Instance Connect を使用して [EC2 インスタンスに接続します](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. S3 ファイルシステムをマウントするには、マウントヘルパーユーティリティ `amazon-efs-utils` を使用します。Linux ディストリビューションに応じて、次のいずれかのコマンドを使用して `amazon-efs-utils` パッケージをインストールします:

   1. Amazon Linux を使用している場合は、次のコマンドを実行して Amazon のリポジトリから efs-utils をインストールします:

      ```
      sudo yum -y install amazon-efs-utils
      ```

   1. その他の[サポートされている Linux ディストリビューション](https://github.com/aws/efs-utils/?tab=readme-ov-file#efs-utils)を使用している場合は、次のコマンドを実行します:

      ```
      curl https://amazon-efs-utils.aws.com/efs-utils-installer.sh | sudo sh -s -- --install
      ```

   1. その他の Linux ディストリビューションについては、*GitHub* の [efs-utils](https://github.com/aws/efs-utils/?tab=readme-ov-file#on-other-linux-distributions) リポジトリを参照してください。

1. 次のコマンドを使用して、ファイルシステムのマウントポイントのディレクトリを作成します:

   ```
   sudo mkdir {path/to/mount}
   ```

1. S3 ファイルシステムをマウントします:

   ```
   FS="{YOUR_FILE_SYSTEM_ID}"
   sudo mount -t s3files $FS:/ {path/to/mount}
   ```

1. ファイルシステムがマウントされていることを確認します:

   ```
   df -h {path/to/mount}
   ```

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

```
ls {path/to/mount}
```

## オブジェクトベースのアクセス
<a name="objectaccess"></a>

S3 API、AWS CLI、AWS SDK、または標準 HTTP ツールを使用して、Amazon S3 との間でファイルをコピーできます。必要なアクセス許可がある場合は以下の方法を使用して、Amazon S3 とインスタンスとの間でファイルをコピーできます。

------
#### [ wget ]

**注記**  
この手法はパブリックなオブジェクトに対してのみ有効です。オブジェクトがパブリックでない場合は`ERROR 403: Forbidden` メッセージが出力されます。このエラーを受け取った場合はAmazon S3 コンソール、AWS CLI、AWS API、AWS SDK、または AWS Tools for Windows PowerShell を使用する必要があります。この際は適切なアクセス許可が必要です。詳細については、*Amazon S3 ユーザーガイド*の[Amazon S3 での Identity and Access Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html)および[オブジェクトのダウンロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)を参照してください。

**wget** ユーティリティは、Amazon S3 からパブリックオブジェクトをダウンロードできる HTTP および FTP のクライアントです。これは Amazon Linux やその他のほとんどのディストリビューションにデフォルトでインストールされ、Windows ではダウンロード可能です。Amazon S3 オブジェクトをダウンロードするには次のコマンドを入力し、ダウンロードするオブジェクトの URL に置き換えます。

```
[ec2-user ~]$ wget https://{{amzn-s3-demo-bucket}}.s3.amazonaws.com/{{path-to-file}}
```

------
#### [ PowerShell ]

[AWS Tools for Windows PowerShell](https://aws.amazon.com/powershell/) を使用して、Amazon S3 との間でオブジェクトを移動できます。

次のように、[Copy-S3Object](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-S3Object.html) コマンドレットを使用して、Amazon S3 オブジェクトを Windows インスタンスにコピーします。

```
Copy-S3Object `
    -BucketName {{amzn-s3-demo-bucket}} `
    -Key {{path-to-file}} `
    -LocalFile {{my_copied_file.ext}}
```

あるいは、Windows インスタンスでウェブブラウザを使用して Amazon S3 コンソールを開くこともできます。

------
#### [ AWS CLI ]

AWS Command Line Interface (AWS CLI) を使用して Amazon S3 から制限された項目をダウンロードし、項目をアップロードできます。ツールのインストールおよび設定方法などの詳細については[AWS Command Line Interface の詳細ページ](https://aws.amazon.com/cli/)を参照してください。

[aws s3 cp](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html) コマンドは Unix **cp** コマンドと似ています。ファイルを Amazon S3 からインスタンスにコピーしたり、ファイルをインスタンスから Amazon S3 にコピーしたりできるほか、ファイルを Amazon S3 の 1 つの場所から別の場所にコピーすることもできます。

オブジェクトを Amazon S3 からインスタンスにコピーするには次のコマンドを使用します:

```
aws s3 cp s3://{{amzn-s3-demo-bucket}}/{{my_folder}}/{{my_file.ext}} {{my_copied_file.ext}}
```

オブジェクトをインスタンスから Amazon S3 にコピーして戻すには次のコマンドを使用します:

```
aws s3 cp {{my_copied_file.ext}} s3://{{amzn-s3-demo-bucket}}/{{my_folder}}/{{my_file.ext}}
```

[aws s3 sync](https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html) コマンドを使用すると、Amazon S3 バケット全体をローカルディレクトリの場所に同期できます。この機能はデータセットをダウンロードし、リモートセットでローカルコピーを最新の状態に保つ際に役立ちます。Amazon S3 バケットに対して適切なアクセス許可がある場合はコマンドで送信元と送信先の場所を入れ替えることで、終了時にローカルディレクトリバックアップをクラウドにプッシュできます。

Amazon S3 バケット全体をインスタンスのローカルディレクトリにダウンロードするには次のコマンドを使用します:

```
aws s3 sync s3://{{amzn-s3-demo-source-bucket}} {{local_directory}}
```

------
#### [ Amazon S3 API ]

API を使用して Amazon S3 のデータにアクセスできます。この API はアプリケーションの開発および、他の API および SDK との統合に役立てることができます。詳細については[「Amazon Simple Storage Service API リファレンス」の「 SDK を使用した Amazon S3 のコード例AWSSDKs](https://docs.aws.amazon.com/AmazonS3/latest/API/service_code_examples.html)」を参照してください。 **

------