はじめに
IaC(Infrastructure as Code)については色々と知識があったものの、自分で実際に作成したことはありませんでした。そのため、学習の際に得た知識を備忘録としてまとめた記事です。
IaCにはさまざまなツールがありますが、今回は Terraform を利用しています。Terraform は、AWS へのデプロイに便利であると考えたのと、他のクラウドプロバイダーでも使用できる点が選定の理由です。
(ただし、最近の買収により有料になるのではないかという懸念もあります)
wslにaws cliをインストール
こちらを元にaws cliのみをインストールしました
AWSの準備
awsの設定
awsでアクセスキーなどの発行については、割愛させていただきます。
awsのコンソール画面から、発行したものをwslに登録します
aws configure
以下の入力が求められるので、入力します
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXX
Default region name [None]: us-west-2
Default output format [None]: json
登録が成功しているか確認
cat ~/.aws/credentials
開発環境(devcontainer)の準備
ファイルを作成
mkdir .devcontainer
touch .devcontainer/devcontainer.json
{
"name": "Ubuntu",
// 開発環境(docker)の設定
"image": "mcr.microsoft.com/devcontainers/base:jammy",
"features": {
"ghcr.io/devcontainers/features/aws-cli:1": {},
"ghcr.io/devcontainers-contrib/features/terraform-asdf:2": {}
},
// 利用ユーザーをvscodeに設定
"remoteUser": "vscode",
// マウント(aws関係)
"mounts": [
"source=${localEnv:HOME}${localEnv:USERPROFILE}/.aws/,target=/home/vscode/.aws/,type=bind,consistency=cached"
],
// エディタの設定
"customizations": {
"vscode": {
"extensions": [
"shardulm94.trailing-spaces",
"chihiro718.whitespacepp",
"HashiCorp.terraform",
"amazonwebservices.aws-toolkit-vscode",
"mhutchie.git-graph",
],
"settings": {
"editor.formatOnSave": true,
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.detectIndentation": false,
"editor.renderWhitespace": "all",
"editor.fontSize": 14,
"editor.fontFamily": "MS ゴシック",
"editor.renderLineHighlight": "all",
"editor.rulers": [
40,
80,
120
],
"[terraform]": {
"editor.defaultFormatter": "hashicorp.terraform",
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file"
},
"[terraform-vars]": {
"editor.defaultFormatter": "hashicorp.terraform",
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file"
}
}
}
}
}
この後、devcontainerに入りなおします。
バージョン確認
aws cliのバージョン確認
aws --version
下記のように出てれば正常です(バージョンの差異はあると思います)
$ aws --version
aws-cli/2.17.33 Python/3.11.9 Linux/6.6.36.3-microsoft-standard-WSL2 exe/x86_64.ubuntu.22
awsのアカウント情報の確認
下記コマンドでwslと同じ情報が表示されていれば正常です。
cat ~/.aws/credentials
terraformのバージョン確認
terraform --version
下記のように表示されていれば正常です(バージョンの差異はあると思います)
$ terraform --version
Terraform v1.9.4
on linux_amd64
Your version of Terraform is out of date! The latest version
is 1.9.5. You can update by downloading from https://www.terraform.io/downloads.html
もし、表示されない場合、一度devcontainerに入りなおしてみてください。
terraformの実行
terraformの検証用ファイルを準備
mkdir test
touch test/sample.tf
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_vpc" "test_vpc" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
}
resource "aws_subnet" "test_subnet" {
vpc_id = aws_vpc.test_vpc.id
cidr_block = "10.0.16.0/20"
availability_zone = "ap-northeast-1a"
}
resource "aws_instance" "test_ec2" {
ami = "ami-00c79d83cf718a893"
instance_type = "t2.micro"
subnet_id = aws_subnet.test_subnet.id
}
ディレクトリ移動
cd test
terraformのコマンド実行!
まずは、初期化コマンドを実施
terraform init
次に、クラウド上にどんなものが生成する予定かを見ます
terraform plan
実際に、クラウド上に生成
terraform apply
実行後、awsコンソール上で調べてると作成されているはずです
作った物を削除します
terraform destroy
実行後、awsコンソール上で調べてると削除されているはずです
コマンドの詳細については、こちらが参考になりました
さいごに
Terraform での環境の構築・削除が予想以上に早く行えることに驚きました。以前は AWS コンソールから手動で作成していましたが、今後は可能な限り IaC を活用したいと考えています。まだ Terraform を始めたばかりなので、これまで作成してきた構成を Terraform 化しながら学習を続けていこうと思います。