注意
特になし
環境
- AWS
- WSL2
- terraform 1.6.0
背景
Terraformを使って、VPCの設計に再現性を持たせたい。
結論
作業ディレクトリにmain.tfファイルを作成する。次に、terraform applyなどのコマンドを実行する。
今回は、VPCの中に一つのEC2インスタンスを配置します。
terraformを使ってVPCを設計する
概要
WSL2にAmazon CLIをインストールして、terraformを使ってAWS上にVPCを構築する。
手順(WSL2にAmazon CLIをインストールする)
公式ドキュメントは下記です。
初めてのインストールの場合
下記のコマンドを実行してください。
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
アップグレードの場合
アップグレードの場合、「sudo ./aws/install」ではなく、下記のコマンドを実行してください。最初二つのコマンドでディレクトリの位置を把握して、それに対して、アップグレードを行います。
$ which aws
/usr/local/bin/aws
$ ls -l /usr/local/bin/aws
lrwxrwxrwx 1 root root 37 Oct 31 16:39 /usr/local/bin/aws -> /usr/local/aws-cli/v2/current/bin/aws
$ sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
アクセスキーの設定
アクセスキーを設定する。
$ aws configure
AWS Access Key ID: YourKeyID
AWS Secret Access Key: YourAccessKey
Default region name: ap-northeast-1
Default output format: json
$ cat ~/.aws/credentials
...
$ cat ~/.aws/config
...
インストールの確認
正確にインストールされたかどうかの確認をする。
$ aws --version
$ aws ec2 describe-instances | grep InstanceId
手順(WSL2にterraform管理ソフト(tfenv)をインストールする)
公式ドキュメントは下記です。
インストール
下記のコマンドを実行してください。
$ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
$ echo 'export PATH=$PATH:$HOME/.tfenv/bin' >> ~/.bashrc
$ source ~/.bashrc #ターミナルを開き直すか、このコマンドを使うことでPATH環境変数がリロードされる。
「echo 'export PATH=\$PATH:$HOME/.tfenv/bin' >> ~/.bashrc」ではなくて、「ln -s ~/.tfenv/bin/* /usr/local/bin」でも問題ないです。前者は、対象ディレクトリをPATH環境変数に直接加える方法で、後者は、すでにPATH環境変数に含まれている場所にシンボリックリンクとして対象ディレクトリを加える方法です。
次に、下記のコマンドを実行してください。今回は、terraformのバージョンとして、1.6.0を使用しました。
$ tfenv --version
$ tfenv list-remote
$ tfenv install 1.6.0
$ tfenv list
$ tfenv use 1.6.0
$ terraform --version
手順(terraform管理ソフト(tfenv)で、WSL2からVPCを構築する)
作業用のプロジェクトにmain.tfを配置して、terraform applyなどのコマンドを実行してください。
terraform applyなどのコマンドは、権限の問題でエラーになる可能性があります。その場合、「sudo」をつけてください。しかし、「sudo」を加えると、現セッションのPATH環境変数が引き継がれないので、今度はそれが原因でエラーになることがあります。 その場合、PATH環境変数を引き継ぎつつ、sudo権限で実行するために、「sudo -E」をつけて実行して下さい。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.22.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_vpc" "my_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "my-vpc"
}
}
resource "aws_subnet" "my_subnet" {
vpc_id = aws_vpc.my_vpc.id
cidr_block = "10.0.1.0/24"
tags = {
Name = "my-subnet"
}
}
resource "aws_instance" "my_instance" {
ami = "ami-09a81b370b76de6a2"
instance_type = "t2.micro"
subnet_id = aws_subnet.my_subnet.id
tags = {
Name = "my-instance"
}
}
~/terraform_practice$ ls -l
total 16
-rw-r--r-- 1 root root 684 Oct 31 18:44 main.tf
~/terraform_practice$ terraform init
~/terraform_practice$ terraform plan
~/terraform_practice$ terraform apply
VPCを破壊する
下記のコマンドで、vpcを破壊してください。
~/terraform_practice$ terraform destory
今後の展望
次は、Amazon EKS(kubernetes)とか使ってみる。
参考
- https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
- https://github.com/tfutils/tfenv
- https://qiita.com/onishi_820/items/18f2f8cc61f6b54f9433
- https://qiita.com/If_it_bleeds-we_can_kill_it/items/1ecf36e87a8b616e0c4c