技術検証：AWS CloudShellとS3バケットを活用してストレージ容量を拡張し、大容量データを効率的に管理する方法

## はじめに

AWS CloudShellのデフォルトストレージは1GBとやや限られていますが、S3バケットを活用することで、大容量のストレージを実現できます。

https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/limits.html

:::note warn
**CloudShell自体にはおそらく、ストレージを増設する機能がないため、EC2やS3など他のAWSリソースを活用するのが現実的です。**
:::

この記事では、最も手軽で簡単な方法として、S3バケットを利用したストレージ拡張の手順をご紹介します。***この内容が、どなたかの技術的な参考になれば幸いです。***

## 書こうと思ったきっかけ
以前から、AWSマネジメントコンソール上で手軽に利用できるCloudShellの便利さに魅力を感じており、ほぼ毎日使用しています。

:::note alert
***しかし、ストレージ容量が1GBという制限があり、これが少しボトルネックだと感じていました。***
:::

そこで、S3バケットを組み合わせることで大容量ストレージが利用可能になるのではないかと思い、検証を開始しました。

**必要なときにデータをアップロードしたり、ダウンロードしたりすることで、CloudShellの容量を実質的に拡張できると便利だと考え、この記事を書くことにしました。**

## CloudShellとは
AWS CloudShellは、AWSが提供するブラウザベースのシェル環境です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ce88c49c-7686-ea91-cb66-dd521adbc117.png)

この環境では、AWS CLIや各種プログラミング言語のインタプリタが初期設定済みで利用できるため、必要なツールが事前にセットアップされています。***そのため、追加のセットアップが不要で、コストを最小限に抑えることができます。***

:::note warn
**AWS CLIやツールチェーンが事前に設定されており、追加のセットアップなしで操作を始められるのが大きな特徴です。**
:::

詳細については、以下の公式サイトを参考にしてみてください。

https://aws.amazon.com/jp/cloudshell/

## 実際にやってみた
ここでは、S3バケットを作成し、そのバケットにCloudShellからファイルをアップロードおよびダウンロードする検証を行います。

### 1. S3バケットを作成する
まず、AWSマネジメントコンソールを使用してS3バケットを作成します。これにより、CloudShellと連携可能なストレージを準備します。

サービス一覧から「S3」を選択し、「バケットを作成」ボタンをクリックします。

![Screenshot 2025-01-10 at 22.58.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f49bf3aa-9c03-139a-ace6-b4f7fb21a241.png)

バケット名やリージョン、アクセス設定など、必要な情報を入力してバケットを作成します。

![Screenshot 2025-01-10 at 22.58.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/4d9f31e8-112c-9648-cd51-e3ef66a4174d.png)

:::note warn
**今回はインターネットに公開する必要がないため、パブリックアクセスはすべて無効に設定します。**
:::

### 2. CloudShellでAWS CLIを使用してS3にアクセスする
S3バケットを作成したら、CloudShellからAWS CLIを使用してデータのアップロードやダウンロードを行います。

**ファイルをアップロードするコマンド**

```bash
aws s3 cp /path/to/local/file s3://your-bucket-name/
```

**例：**

- **`/path/to/local/file`**: アップロードしたいローカルファイルのパスを指定します。
  - 例: `~/documents/sample.txt`

- **`your-bucket-name`**: 作成したS3バケットの名前を指定します。
  - 例: `my-s3-bucket`


```bash
aws s3 cp sample.txt s3://my-cloudshell-bucket/
```

**実際の検証画面**

以下のように、`upload: ./memo to s3://test-20250110/memo`と表示され、ファイルがS3バケットに正常にアップロードされたことを確認できます。

![Screenshot 2025-01-10 at 23.06.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d4fd8f78-2f82-b0d7-57c0-981b025cbadc.png)


**ファイルをダウンロードするコマンド**

```bash
aws s3 cp s3://your-bucket-name/file /path/to/local/
```

**例：**

- **`your-bucket-name/file`**: S3上に保存されているファイルのパスを指定します。
  - 例: `my-s3-bucket/sample.txt`

- **`/path/to/local/`**: ダウンロード先のローカルディレクトリを指定します。
  - 例: `~/downloads/`

```bash
aws s3 cp s3://my-cloudshell-bucket/sample.txt ~/downloads/
```

**実際の検証画面**

以下のように、`download: s3://test-20250110/memo to ./memo`と表示され、CloudShell内にファイルがダウンロードされたことが確認できます。

```bash
[cloudshell-user@ip-10-134-6-198 ~]$ aws s3 cp s3://test-20250110/memo /home/cloudshell-user/
download: s3://test-20250110/memo to ./memo                       
[cloudshell-user@ip-10-134-6-198 ~]$ ll | grep memo
-rw-r--r--. 1 cloudshell-user cloudshell-user      218 Jan 10 13:36 memo
```

### 3. S3バケットで大容量データを管理する
必要に応じてデータをS3にアップロード・ダウンロードすることで、CloudShellの1GB制限を実質的に克服できます。

**おすすめの使い方**

:::note info
- **大容量ファイル（ログファイルやバイナリなど）はS3に保存して、必要なときにダウンロード。**
- **CloudShellで作業後のデータをS3にアップロードしてバックアップ。**
- **定期的な同期やファイルの一元管理に活用。**
:::

***AWS CloudShellのデフォルトストレージは1GBと少し物足りない部分がありますが、S3バケットを活用することで、大容量のストレージを実現することができました！***

## まとめ
ここまでお読みいただきありがとうございました。***今回、CloudShellのストレージ容量の制限について、S3バケットを利用することで解決できる可能性を見出し、今後もこの方法を活用していこうと思います。***

:::note warn
**必要なファイルをS3に保存し、必要なときに取り出すことで、作業効率が大幅に向上するはずです。**
:::

実践している人はまだ少ないかもしれませんが、***この内容がどなたかの技術的な参考になれば幸いです！***