Linodeのサーバー環境をTerraformで用意する

# 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/



## LinodeのTerraform対応
LinodeはほぼすべてのリソースがTerraformに対応しています。
サーバーやディスク、ロードバランサーなどの構成をTerraform化することにより、再現性のある素早い構築が可能となります。

対応しているリソースに関しては以下に情報があります。

https://registry.terraform.io/providers/linode/linode/latest/docs

## Linode Terraformのサンプルコードを紹介
今回はLinodeでTerraformを構築する際の参考となるコードを4つご紹介します。
1. Webサーバー(Nginx)の冗長構成
1. WordPressサーバーのシングル構成
1. WordPressサーバーとマネージドDBの構成
1. Kubernetesの構成


## Webサーバー(Nginx)の冗長構成

Webサーバー(Nginx)の冗長構成のサンプルコードとなります。

- Linodeで2台のサーバーを起動し、Nginxをインストール。
- NodeBalancerを作成し、2台のサーバーを紐付ける。
- DNSを作成し、NodeBalancerのIPとドメインを紐付ける。

Terraformサンプルコード
<a href="https://github.com/isss802/linode-terraform-demo/tree/main/web-server">https://github.com/isss802/linode-terraform-demo/tree/main/web-server</a>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/76ef9251-503e-2c20-da3a-dd0e1fe53b36.png)


## WordPressサーバーのシングル構成

WordPressサーバーのシングル構成のサンプルコードとなります。

- Linodeでサーバーを1台起動
- StackScriptを使用してWordPressをインストール

StackScriptとは、サーバーの起動時に読み込ませることができる独自のスクリプトになります。
スクリプトはbashやPythonで記載することができるため、自由自在なテンプレートスクリプトが作成可能です。

Terraformサンプルコード
<a href="https://github.com/isss802/linode-terraform-demo/tree/main/wordpress-single">https://github.com/isss802/linode-terraform-demo/tree/main/wordpress-single</a>

StackScriptサンプルコード
※コードを確認するためにはLinodeのアカウントが必要となります。
<a href="https://cloud.linode.com/stackscripts/996728">https://cloud.linode.com/stackscripts/996728</a>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/4b0c709b-2460-c519-8a99-e7a6ee05bb8a.png)


## WordPressサーバーとマネージドDBの構成

WordPressサーバーとマネージドDBの構成のサンプルコードとなります。

- Linodeでサーバーを1台起動
- マネージドデータベースをMySQLで起動
- StackScriptを使用してWordPressをインストール、参照先DBはマネージドDB


Terraformサンプルコード
<a href="https://github.com/isss802/linode-terraform-demo/tree/main/wordpress-managed-db">https://github.com/isss802/linode-terraform-demo/tree/main/wordpress-managed-db</a>

StackScriptサンプルコード
※コードを確認するためにはLinodeのアカウントが必要となります。
<a href="https://cloud.linode.com/stackscripts/996727">https://cloud.linode.com/stackscripts/996727</a>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/d2222a2f-ce02-b13e-6202-00b74a23c3fc.png)

## Kubernetesの構成

Kubernetesの構成のサンプルコードとなります。

- Linode LKE Clusterを構築する
- Nodeを2台構築する

構築後はkubectl等を利用してアクセスすることが可能です。

```sh
export KUBE_VAR=`terraform output -raw kubeconfig` && echo $KUBE_VAR | base64 -d > lke-cluster-config.yaml
export KUBECONFIG=lke-cluster-config.yaml
kubectl config get-contexts
kubectl get nodes
```

Terraformサンプルコード
<a href="https://github.com/isss802/linode-terraform-demo/tree/main/linode-kubernetes-engine">https://github.com/isss802/linode-terraform-demo/tree/main/linode-kubernetes-engine</a>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/a359f2e3-8f6c-3057-1b86-aa9babeb1685.png)

## まとめ
今回は4つの構成についてTerraformのコードをご紹介しました。
Linodeでは様々なリソースをTerraformでコード化することができます。
ぜひ今回のコードを参考に、Terraformによるコード化を進めてみてはいかがでしょうか。

## 関連記事

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

https://qiita.com/organizations/Akamai