さくらのクラウドシェルでusacloudやTerraformを動かそう

# さくらのクラウドシェルとは、ブラウザ上のシェルからクラウドを操作

《[さくらのクラウドシェル](https://www.sakura.ad.jp/services/cloudshell/)》は、ウェブブラウザ上で利用できるシェル環境（2023年5月25日公開）です。

このページは、《さくらのクラウドシェル》の説明と、 usacloud と Hashicoorp Terraform を使って環境構築するための API 取得方法や、各ツールの利用手順をまとめました。

## ブラウザで操作する方法とは？

利用するには、[さくらのクラウドシェル](https://www.sakura.ad.jp/services/cloudshell/) のページを開き、「無料で試す」ボタンをクリックすると、すぐに利用できます。

対応ブラウザは Google Chrome、Mozilla Firefox、Microsoft Edge、Apple Safari（各最新バージョン）です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/be3a7623-ef9b-899a-4a50-d05e3c7bde93.png)

この画面は、`sl` コマンドを実行した結果です（ `sudo apt-get install sl` で入れて、 `/usr/games/sl` を実行しました）。



ブラウザさえあれば操作できますので、パソコンだけでなく、スマートフォンやタブレットからも操作できます。たとえば、社内や学内ネットワークがセキュリティでガチガチに固められて雑に試せる Linux 環境が欲しい方のみならず、外出先で急にサーバの疎通確認が必要になった場合にも利用できるので安心です

細かな注意点としては、データが保存されなかったり（強制終了したり、20分間操作がない場合、ブラウザを閉じた場合）、会員IDを利用しないと外部と通信できないなどの制約があります。

※《さくらのクラウドシェル》アウトバウンドとの通信は、会員登録が必要かつ、アウトバウンド（インターネット側への通信）ポートが22、53、80、443、1024～65525のみです。インバウンド（さくらのクラウドシェル上の環境）への通信は許可されていないため、ウェブサーバを起動してもアクセスできません（ただし、アクセスできるようにする方法は[こちらの記事](https://kazeburo.hatenablog.com/entry/2023/05/25/162148)が参考になります）。 
※その他の制約は[サイト](https://www.sakura.ad.jp/services/cloudshell/)の「よくある質問」をご覧ください。


## シェル環境とは？

「シェル環境」とは、コンピュータを操作するための場所であり、コマンドライン・インターフェース（CLI）として機能します。《さくらのクラウドシェル》とは、このシェル環境をウェブブラウザ上から利用できる無料のサービスです。現時点では Ubuntu 22.04 の Linux 環境を用いて、

- Vim、Emacs、nano のようなテキストエディタ
- Git、Ansible、Terraform 等の開発者向けツール
- Python、PHP、Golang、Node.js、Ruby 等の開発言語

などが初めから入っています。Ubuntu ですから、初めから入っていないツールも `sudo apt` や `sudo apt-get` 等のコマンドでインストール可能です。




# 《さくらのクラウドシェル》を使い始める

https://www.sakura.ad.jp/services/cloudshell/ をブラウザで開くと「無料で試す」のボタンがあるのでクリックします。会員IDでログインする場合も、このボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d40594ad-ab19-8461-0d88-7c46df83eb42.png)

次の画面では、約款（利用規約）の確認を求められます。基本約款、さくらのクラウドシェルサービス約款の内容を確認し、【約款に同意する】をクリックしてチェックを入れた後、【会員IDで利用する】をクリックします。会員IDを使わない場合は【すぐに利用する】をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/1c9116cf-3f92-6a75-b4b1-c65b50d1c8c9.png)

その次の画面では【login】をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/098c0ddb-0aa7-b6b9-ce70-c8234dc4518d.png)

さらに会員IDでログインをすると、数秒ほどで次のような画面が出たら操作できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/a5a2aef8-86d5-c620-846d-38fa6c37c156.png)

画面の下にある各項目をクリックすると、表示画面をカスタマイズできます。

- 「Default font」……フォントの選択です。「Pgoramming font」にすると、 `0` など操作やコーディング時の可視性が高まるフォントに切り替えられます。
- 「Medium size」……フォントの大きさを変更できます。
- 「Night theme」……デフォルトは暗めのテーマですが「Hack」「Colorless」を選べます。
- 「None image」……背景画像です。「桜葉愛」「まりな」「vpsちゃん」を選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/0648eca2-c18c-1a5b-c76b-c5c61242a4ac.png)


なお、操作せず20分経過すると操作ができなくなります。画面の下に出る「Reset」（リセット）ボタンをクリックすると、環境をリセットして再利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d1391704-f23c-ddff-7f5c-ca2260de5a03.png)



# 《さくらのクラウドシェル》で usacloud と Terraform を動かす

《さくらのクラウド》はコントロールパネルから操作するだけでなく、APIやコマンドラインツールを使った操作や管理も可能です。もちろん、《さくらのクラウドシェル》からも、サーバの作成や管理を行えます。

以降は、実際にシェル上から各種ツールを使う手順の紹介です。

**※《さくらのクラウドシェル》は無料ですが、usacloud や Terraform でサーバ等のリソースを実際に作成しますと、API による《さくらのクラウド》の操作になるため、通常通り利用するリソースにおうじた料金が必要ですのでご注意ください。**

## 事前準備（APIキーの作成）

[usacloud](https://docs.usacloud.jp/usacloud/) と [Terraform](https://docs.usacloud.jp/terraform/) を使うには、あらかじめ「APIキー」の作成が必要です。

まだ作成していない場合は、 [ドキュメントの手順](https://manual.sakura.ad.jp/cloud/api/apikey.html) を参考にAPIキーを作成します。APIキーを作成すると、

- アクセストークン
- アクセストークンシークレット
 
が作成されます。どちらも以降の操作で必要なので控えておきます。

## usacloud を使う

コマンドラインで《さくらのクラウド》を操作する `usacloud` CLI は、《さくらのクラウドシェル》上に初めから入っていますので、インストール作業は不要です。

利用開始にあたり、`usacloud config` コマンドを実行する初期設定が必要です。

```
% usacloud config
```

実行すると、API キー等の入力が求められますので、順番に入力します。

```
Setting SakuraCloud API Token =>
        Enter token: 【ここにアクセストークンを入力してエンター】

Setting SakuraCloud API Secret=>
        Enter secret: 【ここにアクセストークンシークレットを入力してエンター】

Setting SakuraCloud Zone=>
        Enter Zone[tk1a/tk1b/is1a/is1b/tk1v]: tk1a	←東京第1ゾーン

Setting Default Output Type=>
        Enter Default Output Type[table/json/yaml]: table ←出力を表形式

Written your settings to /home/sakura/.usacloud/default/config.json ←設定ファイルの保存場所
```

最後に、次のようにシェルに戻ってきたら、セットアップは完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/2351e88f-79f7-ee14-40dc-317258d0302d.png)


※別の方法として、環境変数で定義する方法もあります。

```
% export SAKURACLOUD_ACCESS_TOKEN=【アクセストークン】
% export SAKURACLOUD_ACCESS_TOKEN_SECRET=【アクセストークンシークレット】
% export SAKURACLOUD_ZONE=【ゾーン】
```


### サーバ一覧を表示する

`usacloud server ls` コマンドは、サーバ一覧を表示するコマンドです。既にサーバが作成済みの場合は、次のようにサーバ情報を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/45f88a3f-6a95-5605-3bca-9ea1bb3c07c6.png)

### サーバを作成する

`usacloud server create` コマンドを実行すると、指定した条件どおりにサーバとディスクを作成します。東京第1ゾーンで、CPU1コア、メモリ1GB、ストレージは20GBのSSD、OSはUbuntuを選択するには次のように実行します。

```
% usacloud server create \
        --zone tk1a \
        --name myserver \
        --cpu 1 \
        --memory 1 \
        --disk-name mydisk \
        --disk-disk-plan ssd \
        --disk-size 20 \
        --disk-os-type ubuntu \
        --disk-edit-host-name myserver \
        --disk-edit-password mypassword  \
        --network-interface-upstream shared
```

コマンドを実行すると、確認が求められますので ``y`` を入力します。その後、自動的にサーバ作成が進行します。

※処理によっては、時間がかかるかもしれません。タイムアウトして処理が中断されないように、定期的にエンターキー等を押すと安全です。

しばらく待つと、完了の表示になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/52b6c4f7-c520-255a-daef-3107c7aba759.png)

コントロールパネルを開くと、ここでも作成されているのが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/df591019-5054-b793-545a-690915a52b47.png)

さて、この状態では停止状態（ InstanceStatus が down）のため、コマンドを実行して起動しましょう。`usacloud server boot myserver` コマンドを実行し、 `myserver` という今作成したサーバを起動します。※途中の確認プロンプトでは `y` を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/54f69194-aa91-465a-7c7c-7fd5cf044dcc.png)

しばらく待つと、プロンプトが戻り、すぐにサーバが接続できる状態になります。

コントロールパネルを開くと、ここでもサーバが起動しているのが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/1a6776fb-c38e-87e4-8cf0-6ce39de08e04.png)


### サーバの停止・削除

　サーバは作成できるだけでなく、削除も可能です。まずサーバの電源を停止した後、サーバとディスクのリソースを削除できます。

```
% usacloud server shutdown myserver
% usacloud server delete myserver
% usacloud disk delete mydisk
```


## Terraform for さくらのクラウドを使う

TerraformはクラウドのAPIを扱える ``terraform`` コマンドを通し、クラウドを操作します。usacloudもAPIを扱いますが、複数台のサーバやスイッチも含め、様々なリソースをファイル上で管理できる点が大きく異なります。Terraformでは、あらかじめインフラのあるべき状態をコードとして定義しておきます。そして ``terraform`` コマンドを実行するだけで、複雑な構成を自動的に構築します。一旦システムが動き出せば、やはり設定ファイルをベースに構成を変えられますし、不要になれば環境をコマンド一つで削除するのも可能です。

terraformを使う前に、先ほどusacloud同様、APIキーとゾーンを環境変数 ``SAKURACLOUD_ACCESS_TOKEN`` ``SAKURACLOUD_ACCESS_TOKEN_SECRET`` ``SAKURACLOUD_ZONE`` で設定しておきます。

```
% export SAKURACLOUD_ACCESS_TOKEN=【アクセストークン】
% export SAKURACLOUD_ACCESS_TOKEN_SECRET=【アクセストークンシークレット】
% export SAKURACLOUD_ZONE=【ゾーン】
```

以下は簡単なサーバを実行する手順です。

```
% mkdir terraform-sample && cd terraform-sample
% curl -sSL https://bit.ly/sakura-terraform-sample -o sacloud.tf
```

`sacloud.tf` の中には、 Ubuntu 20.04 のサーバを1台起動する手順が書かれています。

```
% terraform init
% terraform apply
var.password
  Enter a value: 【ここに8文字以上のパスワードを入力】

data.sakuracloud_archive.ubuntu: Reading...
data.sakuracloud_archive.ubuntu: Read complete after 0s [id=113201424330]
(省略)
Plan: 2 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: 【yesを入力】
```

処理が始まると、自動的にディスクの作成、サーバの作成が進みます。全ての処理が終わればサーバが起動しますので、ログインできるかどうか確認します。Ubuntuのため、ログインユーザは ``ubuntu``、パスワードは先ほど入力したものを使います。 
確認作業が終わったら ``terraform destroy`` コマンドを実行し（確認画面では作成時のパスワードを入力し、確認プロンプトで `yes` と入力します）、サーバとディスクを一度に消せます。





# 参考情報

- さくらのクラウドシェル | さくらインターネット
  - https://www.sakura.ad.jp/services/cloudshell/
- さくらインターネット、会員登録不要で無償利用可能なオンラインシェル環境 「さくらのクラウドシェル」を2023年5月25日より提供開始 | さくらインターネット
   - https://www.sakura.ad.jp/information/newsreleases/2023/05/25/1968211581/
- APIキー | さくらのクラウド ドキュメント
  - https://manual.sakura.ad.jp/cloud/api/apikey.html
- 「さくらのクラウドシェル」でWebサーバを起動する(ngrok編) - Hateburo: kazeburo hatenablog
  - https://kazeburo.hatenablog.com/entry/2023/05/25/162148