テックブログ

AWS CloudShellを触ってみる

こんにちは、技術部のfです。

今回はAWSで提供されている「AWS CloudShell」というサービスについて少し触ってみたいと思います。

AWS CloudShellとは

AWS公式のドキュメントによると、「AWSマネジメントコンソールから直接起動できる、ブラウザベースの事前認証済みシェル」とあります。

AWSマネジメントコンソールにログインし、CloudShellの画面に移動するとその場で Amazon Linux 2 の環境が構築され、少し待つと利用可能な状態となります。

CloudShell起動後の画面

ドキュメントにもスクリーンショットがありますが、こんな感じの画面がページいっぱいに広がります。

EC2インスタンスのようにマシンタイプやネットワーク設定を指定することなく自動的に構築してくれますので、手軽に Amazon Linux 2 環境でコマンド等を試してみたい時などに有用なサービスとなります。

料金について

CloudShellは無料で利用することができます

ただ、CloudShellではAWS CLIを利用することができる為、例えばAWS CLIでEC2インスタンスを作成する、といった操作を行った場合は実際にそのAWSアカウント内にリソースが作成されますので、その分の追加料金が発生します。

スペックについて

公式ドキュメントによると、以下スペックの環境が作成されるようです。

  • 1 vCPU
  • 2 GiB RAM
  • 1 GB の永続ストレージ

永続ストレージと記述がある通り、このストレージはセッション終了後に即時破棄されるものではなく、最後にセッションを終了してから120日間操作を行っていない場合、自動的に削除が行われる仕組みとなっているようです。

110日以上無操作の状態が続くと、AWSから「○年○月○日に○○リージョンでデータを削除する予定です」といった内容のメール通知が(英語で)届きます。

実際にdfコマンドでディスク容量を確認してみます。

[cloudshell-user@ip-10-0-31-83 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
overlay 30G 11G 18G 38% /
tmpfs 64M 0 64M 0% /dev
shm 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/nvme1n1 30G 11G 18G 38% /aws/mde
/dev/loop0 974M 48K 907M 1% /home
tmpfs 1.9G 0 1.9G 0% /proc/acpi
tmpfs 1.9G 0 1.9G 0% /sys/firmware

/ 領域は30GB、/home 領域が1GBとなっています(黄色でハイライトしている部分)。
ドキュメントには「永続ストレージはホームディレクトリ($HOME)にある」との記載がありますので、あくまでセッション終了後も保持されるのは /home 内のファイルのみ、ということになりますね。

試しに /home と /root 領域に空のファイルを設置してみます。
まずは永続ストレージの領域である /home から。

[cloudshell-user@ip-10-0-31-83 ~]$ touch test.txt
[cloudshell-user@ip-10-0-31-83 ~]$ ls -l
total 0
-rw-rw-r– 1 cloudshell-user cloudshell-user 0 Nov 9 06:41 test.txt

次に永続ストレージの領域内ではない /root に設置します。

[cloudshell-user@ip-10-0-31-83 ~]$ sudo touch /root/test.txt
[cloudshell-user@ip-10-0-31-83 ~]$ sudo ls -l /root/
total 0
-rw-r–r– 1 root root 0 Nov 9 06:42 test.txt

ファイルはどちらも設置することができました。
右上の「Actions」ボタンをクリックし、「Restart AWS CloudShell」を実行してみます。

[cloudshell-user@ip-10-0-44-220 ~]$ ls -l
total 0
-rw-rw-r– 1 cloudshell-user cloudshell-user 0 Nov 9 06:41 test.txt

[cloudshell-user@ip-10-0-44-220 ~]$ sudo ls -l /root/
total 0

永続ストレージである /home 領域に設置した test.txt はそのまま残っていますが、/root に設置した test.txt はなくなっていました。

利用可能なコマンドについて

初期でインストールされているソフトウェアはこちらのドキュメントに記載があります。

シェルに関してはBash、PowerShell、Z Shell(zsh) の3つがインストールされており、デフォルトではBashが利用できます。
実際にCloudshellで確認するとこんな感じの結果になりました。

[cloudshell-user@ip-10-0-18-72 ~]$ echo $SHELL
/bin/bash
[cloudshell-user@ip-10-0-18-72 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/zsh
/bin/zsh
/usr/bin/tmux
/usr/bin/pwsh

先述の通りawsコマンドもインストールされており、「aws s3 ls」を実行すると現在ログインしているAWSアカウントの同リージョンに作成されているS3バケットの一覧が表示されました(結果は割愛します)。

pythonやgit、jq、curlなどのコマンドもインストールされています。

ssやip、tracerouteといったネットワーク関連のコマンドはインストールされていませんでした。
pingはインストールされているものの、CloudShellの仕様上、pingは利用できないようです。

[cloudshell-user@ip-10-0-27-62 ~]$ ping 8.8.8.8
ping: socket: Operation not permitted

root権限について

cloudshell-user というユーザで自動的にログインされていますが、この cloudshell-user はパスワードなしでsudoが使えるように設定されていました。

[cloudshell-user@ip-10-0-27-224 ~]$ sudo grep cloudshell-user /etc/sudoers
cloudshell-user ALL=(ALL) NOPASSWD:ALL

その為、sudoでroot権限を要するコマンドを実行することも、sudoでsuを実行し、rootに昇格することもできます。
(ただし、仕様により先述のpingなど、利用できないコマンドもあります)

[cloudshell-user@ip-10-0-18-72 ~]$ sudo su –
-bash-4.2# whoami
root

また、こちらのドキュメントにもある通り、yumでパッケージをインストールすることもできます
ただ、yumでインストールしたパッケージに関してはホームディレクトリ外の領域に保存されるものなので、セッション終了時には破棄されます。

実際にApacheをインストールしてみます。

[cloudshell-user@ip-10-0-62-62 ~]$ sudo yum install httpd
(略)
Installed:
httpd.x86_64 0:2.4.54-1.amzn2

Dependency Installed:
apr.x86_64 0:1.7.0-9.amzn2 apr-util.x86_64 0:1.6.1-5.amzn2.0.2 apr-util-bdb.x86_64 0:1.6.1-5.amzn2.0.2 generic-logos-httpd.noarch 0:18.0.0-4.amzn2 httpd-filesystem.noarch 0:2.4.54-1.amzn2 httpd-tools.x86_64 0:2.4.54-1.amzn2 mailcap.noarch 0:2.1.41-2.amzn2
mod_http2.x86_64 0:1.15.19-1.amzn2.0.1

Complete!

[cloudshell-user@ip-10-0-62-62 ~]$ httpd -v
Server version: Apache/2.4.54 ()
Server built: Jun 30 2022 11:02:23

Apacheがインストールされました。
ただ、systemctlでステータスを確認しようとしたところ、許可されていない操作として実行に失敗しています。

[cloudshell-user@ip-10-0-62-62 ~]$ sudo systemctl status httpd
Failed to get D-Bus connection: Operation not permitted

Apacheを起動した上での動作確認まではできなさそうですが、インストールされるパッケージのバージョンを確認したい時や、設定ファイルの内容を確認したい、といった時などには使えそうです。

セッションについて

ドキュメントによると、以下2パターンの状況においてセッションが終了されるようです。

  • 20~30分程操作を行わなかった場合
  • 約12時間継続してセッションが実行されていた場合

実際に長時間放置していると、以下のようなメッセージが出力されていました。

[cloudshell-user@ip-10-0-31-39 ~]$ Lost your connection to the environment.
Press any key to reconnect and continue using AWS CloudShell
Your session timed out due to inactivity and has been terminated.
Connection is lost. Please refresh the browser to re-establish the connection.

この状態でキー入力等を行うと、最初にアクセスした時と同様に数十秒程の待ちの時間が発生した後、再度セッションが開始されました。

おわりに

本格的に検証したい場合はやはりEC2インスタンスなどを立てる必要がありますが、簡単にコマンドの動作などを確認したい、といった時には無償なので気軽に使えるサービスだと思います。

今はCloudShellのOSは Amazon Linux 2 となっていますが、Amazon Linux 2022 が正式にリリースされたらいずれはCloudShellのOSも Amazon Linux 2022 になるのでしょうか。
Amazon Linux 2022 も今後の続報に期待ですね。

最後までお読みいただきましてありがとうございました。
今後ともネットアシストをよろしくお願いいたします。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください