Terraform의 provisioner 사용하기 :: Outsider's Dev Story

ssh key 생성

아래 명령어를 실행하여 id_rsa(private key), id_rsa.pub(public key)를 생성해준다.

*ssh-keygen*

그 중 퍼블릭 키를 string 형식으로 public_key에 넣어준다.

resource "aws_key_pair" "deployer" {
  key_name   = var.ssh_key_name
  public_key = var.ssh_public_key
}

aws instance 생성

resource "aws_instance" "example" {
  ami           = var.ami
  instance_type = var.instance_type
  key_name      = var.ssh_key_name
  tags = {
    Name = var.name
  }
}

Nvidia-driver 설치

위에서 설치한 instance에 ssh로 접속하여 nvidia driver를 설치하는 커맨드를 실행시키자.

private_key: 위에서 만든 ssh key의 private key 경로

resource "null_resource" "nvidia_driver" {
  count = var.install_nvidia_driver ? 1 : 0
  provisioner "remote-exec" {
    connection {
      host        = aws_instance.example.public_dns
      user        = var.ssh_user_name
      type        = "ssh"
      private_key = file("${var.ssh_key_name}.pem")
      timeout     = "5m"
    }
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y gnupg2 curl",
      "curl -s -L <https://nvidia.github.io/nvidia-docker/gpgkey> | sudo apt-key add -",
      "curl -s -L <https://nvidia.github.io/nvidia-docker/ubuntu20.04/nvidia-docker.list> | sudo tee /etc/apt/sources.list.d/nvidia-docker.list",
      "sudo apt-get install -y nvidia-driver-525",
      "sudo reboot"
    ]
  }
}