今回は、Terraformを用いたCloud9(SSH接続タイプ)の構築方法をご紹介します。
TerraformでCloud9を構築する場合、SSH接続タイプのみ対応しており、インバウンド通信を開放しないSSM接続タイプは対応していません。
※2022年2月20日現在。
SSM接続タイプへの対応について、GitHubのIssueにはリクエストが上がっているようです。
構成図
今回構築する構成は以下です。
Cloud9・ネットワーク系のリソース・Cloud9のオーナーとするIAMユーザーをTerraformで構築します。
Terraformのバージョン
筆者が使用したTerraformのバージョン情報は以下です。
Terraformのバージョン | 1.1.5 |
AWSプロバイダのバージョン | 4.2.0 |
構築手順
TerraformでCloud9を構築する手順です。
※TerraformのインストールおよびTerraform実行に必要なクレデンシャル(アクセスキーまたはIAMロール)は準備済み、という前提で説明を進めます。
Terraformのバックエンド構築
TerraformのバックエンドとなるAWSリソースを手動で構築します。
AWSマネジメントコンソールにログインして、Terraformバックエンド用のS3バケット・DynamoDBを手動で構築します。
参考:Terraform公式ドキュメント
Terraformのコード準備
Terraform作業環境にて、以下のコマンドを実行してGitHubリポジトリをクローンし、一部のコードを書き換えます。
git clone https://github.com/dogharasu/terraform-cloud9-ssh-env.git
クローンしたリポジトリのファイル「terraform/terraform-config.tf」にて、前の手順で構築したS3バケット名およびDynamoDBテーブル名に書き換えます。
書き換える箇所は以下をご参照ください。
▼terraform/terraform-config.tfの抜粋
############################################################################
# Backend Config
############################################################################
# 参考:https://www.terraform.io/language/settings/backends/s3
terraform {
backend "s3" {
bucket = "<Stateファイルを保管するS3バケット名>"
key = "state/terraform.tfstate"
encrypt = true
region = "ap-northeast-1"
dynamodb_table = "<StateファイルをロックするDynamoテーブル名>"
}
}
Terraformの初期設定
クローンしたリポジトリのディレクトリ「Terraform」にて以下コマンドを実行して、Terraformの初期設定を完了します。
terraform init
Terraformでデプロイ
クローンしたリポジトリのディレクトリ「terraform」にて以下コマンドを実行して、構成図のリソースをデプロイします。
terraform apply -auto-approve
コマンド実行(AWSリソースのデプロイ)が完了するまで待機します。
outputで出力された「cloud9_user_password」の値を控えておきます。
動作確認
Cloud9専用のIAMユーザーでログイン
今回は、Cloud9のオーナーとなる専用IAMユーザー「cloud9-user」もデプロイしています。
terraform apply後に控えた「cloud9_user_password」の値は、「cloud9-user」のログインパスワードです。
マネジメントコンソールにて、ユーザー名に「cloud9-user」、パスワードに「cloud9_user_password」の値を入力してログインします。
パスワード変更を強制しているため、任意のパスワードに変更して進みます。
Cloud9環境を開く
Cloud9の画面に移動して、「example-env」が作成されていることを確認して、「Open IDE」をクリックします。
Cloud9環境が操作できることを確認します。
手順は以上です。
まとめ
今回は、TerraformでSSH接続タイプのCloud9を構築する方法をご紹介しました。
TerraformではSSM接続タイプを指定できない制約はありますが、オーナーARN指定は可能ですので、「IaCをなるべくTerraformに寄せたい」方には利用の余地があると思います。
この記事を通して、少しでもTerraform運用のお役に立てれば幸いです。
参考情報
・Terraform公式ドキュメント(Resource: aws_cloud9_environment_ec2)