1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IaC(terraform)の学習(環境構築)

Last updated at Posted at 2024-08-21

はじめに

IaC(Infrastructure as Code)については色々と知識があったものの、自分で実際に作成したことはありませんでした。そのため、学習の際に得た知識を備忘録としてまとめた記事です。

IaCにはさまざまなツールがありますが、今回は Terraform を利用しています。Terraform は、AWS へのデプロイに便利であると考えたのと、他のクラウドプロバイダーでも使用できる点が選定の理由です。
(ただし、最近の買収により有料になるのではないかという懸念もあります)

wslにaws cliをインストール

こちらを元にaws cliのみをインストールしました

AWSの準備

awsの設定

awsでアクセスキーなどの発行については、割愛させていただきます。
awsのコンソール画面から、発行したものをwslに登録します

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

登録が成功しているか確認

wslのコマンド
cat ~/.aws/credentials

開発環境(devcontainer)の準備

ファイルを作成

wslのコマンド
mkdir .devcontainer
touch .devcontainer/devcontainer.json
.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のバージョン確認
wslのコマンド
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と同じ情報が表示されていれば正常です。

wslのコマンド
cat ~/.aws/credentials
terraformのバージョン確認
wslのコマンド
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の検証用ファイルを準備

devcontainerのコマンド
mkdir test
touch test/sample.tf
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
}

ディレクトリ移動

devcontainerのコマンド
cd test

terraformのコマンド実行!

まずは、初期化コマンドを実施

devcontainerのコマンド
terraform init

image.png

次に、クラウド上にどんなものが生成する予定かを見ます

devcontainerのコマンド
terraform plan

image.png
最後のメッセージ上、問題なさそうでした
image.png

実際に、クラウド上に生成

devcontainerのコマンド
terraform apply

実行すると、実行しますか?と確認がきますので「yes」
image.png

実行後、awsコンソール上で調べてると作成されているはずです
image.png

作った物を削除します

devcontainerのコマンド
terraform destroy

こちらでも、削除しますか?と確認がきますので「yes」
image.png

実行後、awsコンソール上で調べてると削除されているはずです
image.png

コマンドの詳細については、こちらが参考になりました

さいごに

Terraform での環境の構築・削除が予想以上に早く行えることに驚きました。以前は AWS コンソールから手動で作成していましたが、今後は可能な限り IaC を活用したいと考えています。まだ Terraform を始めたばかりなので、これまで作成してきた構成を Terraform 化しながら学習を続けていこうと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?