この記事は『CRESCO Advent Calendar 2021』 22日目の記事です。
『CRESCO Advent Calendar 2021』 1日目の記事でAWSをGitLabでホスティングしましたが、
色々手順があって面倒だったので、Terraform化してみました。
(cloud9のUbuntuプラットフォームでの構築は対応されてなかったので、1日目の記事を見て構築してみてください。)
手順は以下です。
1.Terraform実行環境を作成します。
2.Terraformのセットアップをします。
3.Terraformでリソースを作成します。
それでは、やってみましょう!
1-1.Cloud9サービスコンソールから[Create environment]をクリックします。

1-2.NameにCloud9環境の名前を入力して、(今回はterraform-sandboxとしています)[Next step]をクリックします。

1-3.Configure Settingは何も変えずに[Next step]をクリックします。

1-4.内容を確認したら[Create environment]をクリックします。

2-1.ターミナルで、下記コマンドを実行してTerraformのバージョンを確認します。
※Cloud9はデフォルトでTerraformの最新バージョンがインストールされています。
terraform -version |
2-2.環境変数として、IAMユーザのアクセスキーとシークレットアクセスキーを登録する。
export TF_VAR_access_key="AKIAXXXXXXXXXXXXXXXXXX" |
export TF_VAR_secret_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" |
※IAMのアクセスキーとシークレットアクセスキーは、IAMユーザのサービスコンソールから発行してください。
あと、取扱にはご注意ください。

2-3.Terraformの状態管理をするファイルの保存先としてS3を作成します。S3のサービスコンソールから[バケットを作成]をクリックします。

2-4.バケット名に名前を入力し、(今回はnissy-terraform-bucketとします)AWSリージョンを選択します(今回は東京リージョンとします)。

2-5.バケットのバージョニングは[有効にする]を選択します。

2-6.デフォルトの暗号化は[有効にする]を選択し、暗号化キータイプは[Amazon S3キー]を選択します。

2-7.2-4~2-6までの設定が出来たら、[バケットを作成]をクリックします。

2-8.下記のような緑の画面が出てきたら完了です。

2-9.下記ファイルをCloud9に作成する。
#main.tfファイル |
terraform { |
required_providers { |
aws = { |
source = "hashicorp/aws" |
version = "~> 3.67.0" |
} |
} |
backend "s3" { |
bucket = "hogehogebucket" # 作成したS3バケット |
region = "ap-northeast-1" |
key = "terraform.tfstate" |
} |
} |
# Configure the AWS Provider |
provider "aws" { |
region = "ap-northeast-1" |
} |
2-10.main.tfファイルのあるディレクトリで下記コマンドを実行する。
terraform init |
※[Terraform has been successfully initialized!]のレスポンスがあれば実行成功です。
3-1.事前に踏み台用のCloud9を作成した上で、下記ファイルを作成しIPアドレスを踏み台用Cloud9のものに書き換えます。
※踏み台用Cloud9の作成方法は『CRESCO Advent Calendar 2021』 1日目の記事を確認してください。
#ec2.tfファイル |
resource "aws_instance" "demo" { |
ami = "ami-00000000000000000" |
instance_type = "t2.large" |
tags = { |
Name = "hogehoge-instance" |
} |
} |
variable "key_name" { |
description = "keypair name" |
default = "test-demo-key" |
} |
# キーファイル |
locals { |
public_key_file = "./${var.key_name}.id_rsa.pub" |
private_key_file = "./${var.key_name}.id_rsa" |
} |
resource "tls_private_key" "keygen" { |
algorithm = "RSA" |
rsa_bits = 4096 |
} |
# 秘密鍵ファイルを作る |
resource "local_file" "private_key_pem" { |
filename = "${local.private_key_file}" |
content = "${tls_private_key.keygen.private_key_pem}" |
} |
resource "local_file" "public_key_openssh" { |
filename = "${local.public_key_file}" |
content = "${tls_private_key.keygen.public_key_openssh}" |
# keyファイルの権限を変更する |
provisioner "local-exec" { |
command = "chmod 600 ${local.public_key_file}" |
} |
} |
resource "aws_security_group" "demo" { |
name = "gitlab-instance" |
description = "gitlab-instance" |
vpc_id = "vpc-9aa443fc" # デフォルトvpcのID |
egress = [ |
{ |
cidr_blocks = [ |
"0.0.0.0/0", |
] |
description = "" |
from_port = 0 |
ipv6_cidr_blocks = [] |
prefix_list_ids = [] |
protocol = "-1" |
security_groups = [] |
self = false |
to_port = 0 |
}, |
] |
ingress = [ |
{ |
cidr_blocks = [ |
"0.0.0.0/0", |
] |
description = "" |
from_port = 80 |
ipv6_cidr_blocks = [ |
"::/0", |
] |
prefix_list_ids = [] |
protocol = "tcp" |
security_groups = [] |
self = false |
to_port = 80 |
}, |
{ |
cidr_blocks = [ |
"xx.xx.xx.xx/xx", |
] |
description = "" |
from_port = 22 |
ipv6_cidr_blocks = [] |
prefix_list_ids = [] |
protocol = "tcp" |
security_groups = [] |
self = false |
to_port = 22 |
}, |
] |
} |
resource "aws_eip" "demo" { |
instance = aws_instance.demo.id |
vpc = true |
tags ={ |
"Name" = "gitlab-instance-eip" |
} |
} |
秘密鍵ファイルの作成コードはこちらを引用しました。ありがとうございます!!!
3-2.下記コマンドを実行しデプロイするリソースを確認します。
terraform plan |
3-3.下記コマンドを実行したら[yes]をタイプしてリソースのデプロイを実行します。
terraform apply |
ここまで出来たら、『CRESCO Advent Calendar 2021』 1日目の記事を見ながら踏み台サーバ経由でGitLabインストールを実施してください。なお、.pemファイルはTerraformを実行したCloud9のフォルダに保管されています。
ここまで作ってみると、意外と.pemファイルの作成に悩みました・・・。また、Terraformで対応しきってないリソースなども分かってとても勉強になりました。
とは言え、Terraformはどんどんバージョンアップを重ねているので、これからが楽しみです!
最後までお付き合いありがとうございました!!!