Linode StackScriptsとは何か

# Linodeとは

Linode (https://www.linode.com/) は Akamaiが提供するIaaS (Infrastructure as a Service) プラットフォームプロバイダーのサービスです。リノードと発音します。
Akamaiは2022年2月にLinode社の買収を発表しました。
https://www.akamai.com/ja/newsroom/press-release/akamai-to-acquire-linode
クラウドコンピューティングをよりシンプルに、手頃な価格で、誰もが利用できるようにすることで、イノベーションを加速することができます。
https://www.linode.com/ja/alternative-cloud-provider/

## StackScriptsとは
StackScriptsは、Linodeインスタンスが初回構成時に実行できるスクリプトです。
このスクリプトはカスタマイズ可能で、好みの言語で記述を行うことができます。
例えば、インスタンスの構築時に用いることで、Webサーバーのプロビジョニングを自動化することも可能です。

## やってみて覚えるStackScripts

今回はこちらのチュートリアルを参考に、実際に触りつつStackScriptsを理解していきます。

https://www.linode.com/docs/guides/writing-scripts-for-use-with-linode-stackscripts-a-tutorial/

まずはLinodeのコンソールからStackScriptsを選択し、Createボタンから作成を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/afae6651-266a-d12f-1927-e2030f1af12d.png)

サンプルコードとしてこちらを利用します。
Bashにて実行するスクリプトで、PHPのインストールを行うものです。
条件分岐にてaptを利用できるかの確認をしています。

```
#!/bin/bash

if [ -f /etc/apt/sources.list ]; then
   apt update
   apt -y install php
else
   echo "Your distribution is not supported by this StackScript"
   exit
fi
```

このサンプルコードをコピーして実際にStackScriptsを作成してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/fe72ebab-6312-00b8-c9a1-19fb22d72266.png)


作成されたスクリプトを選択し、コードを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c38195f2-a285-dc56-d4af-bf5d9abe7059.png)

Deploy New Linodeからこのコードを利用してインスタンスを作成することができますので、作成して動作を確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c9da6e36-a024-f44d-5c5d-1e780e19edea.png)

サーバーにログインし、PHPがインストールされていることを確認します。

```
root@localhost:~# php -v
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies
```

このようにインスタンスの構成時にコマンドを実行できることにより、構築の自動化が行えるのがStackScriptsです。

## StackScripts応用編：ユーザー定義フィールド(UDF)

ユーザー定義フィールド(UDF)は、StackScripts利用時にユーザーが任意の値を入力できる項目です。

例えば先程のStackScriptで任意のパッケージをインストールさせたい場合はこのような書き方になります。

```
#!/bin/bash

# <UDF name="PACKAGE" label="package" default="php" example="php" />

if [ -f /etc/apt/sources.list ]; then
   apt update
   apt -y install $PACKAGE
else
   echo "Your distribution is not supported by this StackScript"
   exit
fi
```

ユーザー定義フィールド(UDF)の各項目の説明はこちらです。

|label|Description|
|---|---|
|name|StackScript内で使用する変数名です。|
|label|Linodeのコンソールでユーザーに表示するラベルです。（日本語不可）|
|default|デフォルトの入力値です。|
|example|ユーザーに表示する入力例です。|

こちらのスクリプトを利用してインスタンスを作成すると、以下のように入力フォームが用意され、任意の値を設定できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/28adfe11-b4f5-9d64-9c61-73905b8d200e.png)

## StackScripts応用編：他の言語を利用したい

Bashではなく他の言語を利用したい場合には、ssincludeを利用すると他のStackScriptsを呼び出すことができます。
この場合、StackScriptID=1111はPythonで記載されているスクリプトとなり、pythonのコマンドで実行することによって自動化が可能となります。

```
#!/bin/bash
sudo apt install -y python3
source <ssinclude StackScriptID=1111> 
python3 /root/ssinclude-1111
```

## まとめ

StackScriptsは簡単にスクリプトを記述できるだけなく、利用料金もかかりません。
ぜひ、インスタンスの構築自動化にStackScriptsを活用してみてください。


## 関連記事

アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

https://qiita.com/organizations/Akamai