😺

Cloud9環境でTerraformを使用してAWSリソース(VPC, サブネット, EC2)をデプロイ

2023/10/17に公開

Cloud9環境でTerraformを使用してAWSリソースをデプロイ

VPC, サブネット, EC2をTerraformを使用して作成する

Terraformと依存ツールのセットアップ

Cloud9環境上で以下のコマンドを実行し、必要なツールをインストールする。
Cloud9の環境はAmazon Linux2
環境設定

  1. AWS CLIとGitのバージョンを確認する

    aws --version
    git --version
    
  2. tfenv(Terraformバージョン管理ツール)をインストールする

    git clone https://github.com/tfutils/tfenv.git ~/.tfenv
    sudo ln -s ~/.tfenv/bin/* /usr/local/bin
    
  3. tfenvのバージョンを確認する

    tfenv -v
    
  4. 利用可能なTerraformバージョンをリスト表示する

    tfenv list-remote
    
  5. Terraform 1.5.7をインストールする

    tfenv install 1.5.7
    
  6. インストールされたTerraformバージョンをリスト表示する

    tfenv list
    
  7. 使用するTerraformバージョンを1.5.7に設定する

    tfenv use 1.5.7
    
  8. 使用するTerraformバージョンを確認する

    terraform -v
    
  9. 新しいフォルダを作成して移動します。

    mkdir test-terraform && cd test-terraform
    

Terraformコードの作成

次に、Terraformの設定ファイル(main.tf)を作成する。

cat << 'EOF' > main.tf
terraform {
    required_providers {
        aws = {
            source  = "hashicorp/aws"
            version = "~> 4.51.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_public_subnet" {
  cidr_block = "10.0.1.0/24"
  vpc_id = aws_vpc.my_vpc.id
  map_public_ip_on_launch = true
  availability_zone = "ap-northeast-1a"
  tags = {
    "Name" = "my_public_subnet"
  }
}
resource aws_instance ec2 {
    ami           = "ami-0bba69335379e17f8"
    instance_type = "t2.micro"
    subnet_id     = aws_subnet.my_public_subnet.id
    tags = {
        Name = "tf-test"
    }
}
EOF

リソースのデプロイと削除

以下のコマンドでTerraformの初期化、プラン作成、適用(デプロイ)、削除を行う。

  1. Terraform初期化

    terraform init
    #または
    terraform init -reconfigure
    
  2. プランの作成と確認

    terraform plan
    
  3. インスタンスのデプロイ

    terraform apply
    
    

    実行確認でyesを入力する # Enter a value: yes

    VPCとサブネットとEC2が実際に作成されているか、マネジメントコンソールなどで確認する。

  4. リソースの削除

    terraform destroy
    

Discussion