웹사이트 검색

Terraform을 사용하여 Amazon EC2 인스턴스에 로컬 파일을 업로드하는 방법


이 페이지에서

  1. 무엇을 다룰 것인가?
  2. 제공자는 무엇을 위해 사용됩니까?\n
  3. 전제 조건
  4. 파일 프로비저너를 사용하여 파일 복사\n
  5. '파일' 프로비저너의 실제 적용\n
  6. 결론

EC2 인스턴스로 작업할 때 종종 로컬 파일을 인스턴스에 복사해야 합니다. 이는 파일이 생성되는 즉시 인스턴스에서 즉시 사용할 수 있어야 하는 경우에 특히 필요합니다. 예를 들어 내 Terraform 프로젝트의 요구 사항 중 하나는 Apache 가상 호스트에 대한 구성 파일이 생성되는 즉시 EC2 인스턴스에서 사용할 수 있어야 한다는 것입니다. 이 파일은 두 개의 가상 호스트 구성 파일을 만들기 위한 템플릿으로 사용되었습니다. 이를 위해 Terraforms File Provisioner 도구를 사용하여 이러한 파일을 복사했습니다.

Terraform은 프로비저너 사용을 권장하지 않으며 사용 가능한 경우 대체 기술을 권장합니다. Terraform 웹 사이트에 언급된 이 제한에는 여러 가지 이유가 있습니다.

우리는 무엇을 다룰 것인가?

이 자습서에서는 Terraform을 실행하는 로컬 시스템에서 AWS에서 새로 생성된 Amazon EC2 인스턴스(Ubuntu)로 파일을 복사하는 방법을 살펴봅니다. 이 방법에서는 Terraform에서 제공하는 파일 유틸리티를 사용합니다. 단순히 파일을 EC2 인스턴스에 복사하여 사용법을 시연합니다.

제공자는 무엇을 위해 사용됩니까?

프로비저너는 일반적으로 다양한 리소스를 생성, 삭제하고 프로덕션 또는 개발 환경에서 사용할 준비가 된 시스템을 준비하기 위한 스크립트를 실행하는 데 사용됩니다. 프로비저닝 작업에는 다음과 같은 작업이 포함됩니다.

  1. 운영 체제를 업그레이드합니다.\n
  2. 계정을 만들고 서비스 및 기타 시스템 관리 작업을 구성합니다.\n
  3. 소프트웨어 설치.\n
  4. 시스템에서 파일을 전송하고 관리합니다.\n
  5. 시스템 IP 주소, 포트 및 기타 작업 구성.

전제 조건

  1. Terraform의 기초.
  2. 로컬 시스템에 설치된 Terraform 및 AWS CLI.
  3. AWS 계정에 액세스하도록 구성된 AWS CLI.\n

파일 복사를 위해 파일 프로비저너 사용

'파일 프로비저너'는 Terraform을 실행하는 시스템에서 동일한 시스템 또는 EC2 인스턴스와 같은 다른 시스템으로 파일 및 디렉토리를 복사하는 데 사용됩니다. 프로비저너는 로컬 및 원격 시스템에 적용할 수 있습니다. Terraform은 배포 작업에 탁월하지만 프로비저닝에는 능숙하지 않습니다. 많은 운영 체제와 명령이 Terraform에서 적절하게 지원되지 않습니다. 이것이 Terraform이 프로비저너를 마지막 옵션으로 사용하도록 제안하는 이유입니다.

'파일' 프로비저너의 실제 적용

이 섹션에서는 '파일' 프로비저너를 사용하는 실용적인 방법을 볼 것입니다. Terraform을 사용하여 EC2 인스턴스 리소스를 생성한 다음 로컬 시스템에서 이 인스턴스로 파일을 복사합니다. 지금 바로 해보자:

1단계. 먼저 원격 시스템에 복사할 파일을 만듭니다. 모든 구성 파일이 포함된 디렉토리 내에 생성합니다.

$ nano dummy.txt

또한 이 파일에 일부 콘텐츠를 추가합니다.

$ echo “Our dummy file” > dummy.txt

2단계. 'instance.tf' 또는 원하는 이름이지만 확장자가 '.tf'인 파일을 만듭니다.

$ sudo instance.tf

이제 이 파일을 아래 내용으로 채웁니다.

provider "aws" {
region ="us-east-1"
}

resource "aws_instance" "webserver" {
ami ="ami-id-you-want-to-use"
instance_type = "t2.micro"
key_name = "Name-of-your- EC2-keypair"
vpc_security_group_ids = ["Use-an-existing-SG"]
associate_public_ip_address = true

  provisioner "file" {
       source      = "dummy.txt"
       destination = "/home/ubuntu/file1.txt"
      
connection {
     type        = "ssh"
     user        = "ubuntu"
     private_key = "${file("Path-to-EC2-keyPair-on-Local-system.pem")}"
     host        = "${self.public_ip}"
   }
  }


tags = {
   Name = "FileProvisionerDemo"
}
}

위의 코드는 'dummy.txt' 파일을 'file1.txt'라는 이름으로 EC2 인스턴스에 복사합니다. 여기에서 기존 보안 그룹을 사용했습니다. Terraform을 사용하여 새 보안 그룹을 만들고 여기에서 사용할 수 있습니다. 여기에 사용된 일부 인수에 대한 설명을 살펴보겠습니다.

  • 소스: 파일 및 디렉토리의 절대적 위치 또는 Terraform 프로젝트 디렉토리에 해당하는 상대 위치.\n
  • 대상: 대상 시스템의 절대 경로입니다.
  • 연결 블록: Terraform은 연결 블록을 사용하여 서버와 통신하는 방법을 학습합니다. 파일 프로비저너는 'ssh' 및 'winrm' 유형의 연결을 모두 지원합니다.\n
  • 유형: 이 필드는 'ssh' 또는 'winrm'일 수 있는 연결 유형을 지정합니다. 이 실습에서는 SSH 연결을 사용했습니다.\n
  • user: 연결에 사용할 사용자를 지정합니다.\n
  • private_key: 연결 설정을 위한 SSH 키의 내용입니다.\n
  • 호스트: 연결할 리소스의 주소를 지정합니다.\n
  • self: 연결의 부모 리소스를 나타내고 리소스의 모든 특성을 보유하는 개체입니다.\n

파일 프로비저너는 인증서, 에이전트, host_key 등과 같은 다른 인수도 지원합니다.

3단계. 다음을 사용하여 프로젝트 디렉토리를 초기화합니다.

$ terraform init
$ terraform validate
$ terraform apply

샘플 출력:

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.webserver will be created
  + resource "aws_instance" "webserver"

5단계. 이제 아래와 같이 인스턴스가 생성됩니다.

결론

이 가이드에서는 '파일' 프로비저너를 사용하여 파일을 인스턴스에 복사하는 방법을 살펴보았습니다.