AWS/Terraform

【Terraform】Cloud9(SSH接続タイプ)を構築してみた

今回は、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)