こんにちは、soraです。
今回は、Cloud9上にTerraformの実行環境を作ってみたことについて書いていきます。
Cloud9上にCDK+Goの実行環境を作ってみたことは、先日記事しました。
Cloud9上にCDK+Goの実行環境を作ってみた
AWS Cloud9とは
AWS Cloud9は、AWS上に統合開発環境を簡単に作ることができ、ブラウザ上でコードの記述や実行ができるサービスです。
実態としては、EC2サーバを起動してその上に統合開発環境を作ってくれます。
特にローカル環境を汚したくない方やWindowsPCを使っていてローカルで開発環境を作るのを手間に感じる方は、利用すると便利なサービスだと思います。
Terraformとは
Terraformは、HashiCorp社によって開発されたIaCを実現するツールです。
CDKとは異なり、独自言語であるHCL (HashiCorp Configuration Language)を使う必要があります。
また、AWSだけでなくGDPやAzureなど他のクラウドに対しても使用可能です。
個人的には、公式のマニュアルも読みやすいことも好きなポイントの1つです。
公式のマニュアル(Docs overview | hashicorp/aws | Terraform Registry)
やってみた
それでは、実際にCloud9上にTerraformの環境を作っていきます。
Cloud9の構築
Cloud9のページから[Create environment]を押して、セットアップ画面で入力・設定変更をします。
名前を入れて、他はEC2インスタンスタイプを含めてデフォルトです。
[Create]を押して、少し待つとセットアップが完了します。
セットアップが完了したら、Cloud9 IDEの列の[OPEN]から環境に入れます。
Terraformの環境準備
Cloud9の場合、aws-cliやgitがデフォルトでインストールされています。
gitはパッケージをインストールするときに使用します。
$ aws --version
aws-cli/1.19.112 Python/2.7.18 Linux/4.14.301-224.520.amzn2.x86_64 botocore/1.20.112
$ git -v
git version 2.38.1
Terraformのバージョン管理に便利なtfenvをインストールします。
その後に、Terraformをインストールします。
#tfenvのインストール
$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
#パスを通す
$ sudo ln -s ~/.tfenv/bin/* /usr/local/bin
#tfenvのバージョン確認
$ tfenv -v
tfenv 3.0.0-18-g1ccfddb
#Terraformのインストール可能なバージョンの確認
$ tfenv list-remote
1.4.0-alpha20221207
1.4.0-alpha20221109
1.3.7
1.3.6
……
0.1.1
0.1.0
#Terraformのインストール
$ tfenv install 1.3.7
#Terraformのインストール済みのバージョンの確認
$ tfenv list
#利用するTerraformのバージョンを指定
$ tfenv use 1.3.7
#利用中のTerraformのバージョン確認
$ terraform -v
Terraform v1.3.7
on linux_amd64
テスト
せっかくなので実際にCloud9上でTerraformを使ってみます。
今回はEC2を作成してみます。
まずテスト用にフォルダを作成します。
#新しいフォルダを作成して移動します。
$ mkdir test-terraform && cd test-terraform
main.tfを作成して、処理を記載します。
今回は簡易なため1ファイルにまとめていますが、本来であればmainと各リソース作成のコードは分けた方が良いです。
Terraformで実行・管理している状態を保存する.tfstateファイルは、保存先としてローカル(ここではCloud9)ではなくS3を指定しています。(backend s3の箇所)
main.tf
terraform {
#AWSプロバイダーのバージョン指定
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.51.0"
}
}
#tfstateファイルをS3に配置する(配置先のS3は事前に作成済み)
backend s3 {
bucket = "sora-testbucket-terraform"
region = "ap-northeast-1"
key = "tf-test.tfstate"
}
}
#AWSプロバイダーの定義
provider aws {
region = "ap-northeast-1"
}
#EC2の作成
resource aws_instance ec2 {
ami = "ami-0bba69335379e17f8"
instance_type = "t2.micro"
tags = {
Name = "tf-test"
}
}
ソースコードが完成したので、実行していきます。
#ワークスペースの初期化や必要なプラグインのダウンロード
$ terraform init
#実行したときのリソースの差分を確認(実行結果は一部省略、行は詰めています)
$ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.ec2 will be created
+ resource "aws_instance" "ec2" {
+ ami = "ami-0bba69335379e17f8"
+ instance_type = "t2.micro"
+ tags = {
+ "Name" = "tf-test"
}
Plan: 1 to add, 0 to change, 0 to destroy.
#実行
$ terraform apply
コマンド実行後に、EC2が生成されていることが確認できます。(画像2行目)
CDKとは異なり、CloudFormationスタックを生成されません。
また注意点として、Terraformで構築したリソースを変更したい場合は、直接変更せずソースコードを修正して変更するようにしましょう。
tfstateで保持している状態と現状のリソースの整合性が取れなくなり、管理する上で良くないです。
クリーンアップ
最後に、Terraformで作成したEC2を削除します。
$ terraform destroy
最後に
今回は、Cloud9上にTerraformの実行環境を作って実行するまでの流れを紹介しました。
TerraformやCDKなどのIaCを実現するツールは、AWSで構築を行う際に基本的に使われるため、興味がある方はぜひ使ってみてはいかがでしょうか。