導言
Terraform 프로젝트를 사용 사례와 인지 得到的 복잡도에 따라 적절히 구성하는 것은 일상 operations를 위해 그들의 유지 가능性和 확장 가능性을 보장하는 데 필요하다. 코드 파일을 적절히 организова는 시스템적 인 접근方 法은 배치 期间에 프로젝트가 스케일 수용 가능하며, 당신과 당신의 팀이 사용할 수 있게 하는 것이 필요하다.
이 튜토리얼에서, 일반적 인 목적과 복잡도에 따라 Terraform 프로젝트를 구성하는 방법을 배울 것이다. 그리고, Terraform의 더 일반적인 기능들을 사용하여 간단한 구조의 프로젝트를 만들 것이다: 변수, 로컬, 데이터 소스, 프로visioner. 결국, 당신의 프로젝트는 디지털 오cean에서 Ubuntu 20.04 서버(Droplet)를 배치하고, Apache 웹 서버를 설치하고, 도메인을 웹 서버로 지정할 것이다.
사전 요구 사항
-
디지털 오cean의 제어 パネル을 통해 생성할 수 있는 디지털 오cean 개인 액세스 토큰. 디지털 오cean 제품 문서에서, 개인 액세스 토큰 만들기에 대한 지침을 찾을 수 있다.
-
DigitalOcean 계정에 추가된 パスWORDLESS SSH キー,それはHow To Use SSH Keys with DigitalOcean Droplets를 따라 생성할 수 있습니다.
-
Terraform을 로컬 マシン에 설치합니다. Operating System에 따라 지침을 보십시오. Step 1 of the How To Use Terraform with DigitalOcean tutorial.
-
Python 3이 您的 로컬 컴퓨터에 설치되어 있습니다. 您的 操作系统에 대해 Step 1을 Python 3 로 로컬 pgmming 환경 설치 및 세팅 방법에서 완료 할 수 있습니다.
-
DigitalOcean 계정에 전체 등록 도메인 이름이 추가되었습니다. 그렇게 하는 방법에 대한 지침은 공식 文档에 방문하십시오.
Note: 이 튜토리얼은 Terraform 1.0.2
로 specifics 적으로 시험 되었습니다.
Terraform 프로젝트의 구조 이해
이 섹션에서, Terraform이 어떤 프로젝트를 인식하는지, 인프라 코드를 어떻게 구조화할 수 있는지, 어느 방법을 선택할 때가 있는지 배울 수 있습니다. 또한 Terraform 작업 공간(workspace)에 대해 배울 수 있으며, 그들이 무엇을 하는지, Terraform이 상태를 어떻게 저장하는지에 대해 배울 수 있습니다.
A resource는 Terraform 코드에 declared 된 雲 서비스(예를 들어 DigitalOcean Droplet)의 엔tity로, 지정되거나 추론되는 속성에 따라 생성되는 것입니다. 다양한 자원은 공통적인 연결을 통해 인프라스트럭쳐를 형성합니다.
Terraform은 인프라스트럭쳐를 정의하는 전문 프로그래밍 언어, Hashicorp Configuration Language(HCL)를 사용합니다. HCL 코드는 일반적으로 tf
확장자를 가지는 파일에 저장됩니다. Terraform 프로젝트는 tf
파일을 포함하고 있는 디렉터리로 任意의 디렉터리이며, init
명령어를 사용하여 Terraform 캐시와 기본 로컬 상태를 세팅합니다.
Terraform state는 실제로 雲에 배치 된 자원을 추적하는 기계로, 상태는 이를 저장하기 위해 백엔드(로컬 디스크에 있는 것과 파일 스토리지 雲 서비스나 전문 상태 관리 소프트웨어에 있는 것)에 대입되어 가장 적절한 이冗余과 신뢰성을 달성합니다. 다양한 백엔드에 대해 더 많은 정보를 찾으시려면 Terraform 文档를 읽어 보십시오.
프로젝트 작업공간 允许多个状态共享相同的配置。这允许您部署相同的基础设施的不同实例。每个项目都从名为 default
的 workspace 开始——如果您没有显式地创建或切换到其他 workspace,则将使用此 workspace。
모dule(Terraform 中的模块类似于其他编程语言中的库)是参数化代码容器,封装了多个资源声明。它们允许您抽象掉基础设施的一个常见部分并稍后重新使用它。您可以为不同的输入使用不同的参数。
一个 Terraform 项目还可以包括外部代码文件以用于动态数据输入,这些可以解析 CLI 命令的 JSON 输出并提供给资源声明。在本教程中,您将使用一个 Python 脚本。既然你知道了一个 Terraform 项目的组成方式,让我们回顾一下两种通用的 Terraform 项目结构方法。
単纯 구조
단순 struktur
간단한 구조는 소형 및 테스트 프로젝트에 적합하며, 다양한 종류의 자원과 변수가 몇 개 뿐입니다. 일반적으로 각 자원 종류마다 (또는 주 구성 файлов과 함께 더 많은 도우미) 하나의 구성 파일이 있고, 사용자 defined 모듈이 없습니다. 이러한 이유로 대부분의 자원은 독특하며 일반화되고 다시 사용되기 어려울 정도로 많지 않습니다. 이러한 구조를 따라서, 대부분의 코드는 같은 디렉터리에 서로 옆에 저장되며, 이러한 프로젝트는 일반적으로 일정数量的 변수(예를 들어, 雲에 접근하기 위한 API 키)가 있으며, 동적 데이터 입력과 다른 Terraform과 HCL 특징을 사용할 수 있습니다.
이러한 방법의 파일 구조의 예로, 이 튜토리얼에서 construc 할 수 있는 프로젝트가 final 로 어떻게 보일 것인가요?
.
└── tf/
├── versions.tf
├── variables.tf
├── provider.tf
├── droplets.tf
├── dns.tf
├── data-sources.tf
└── external/
└── name-generator.py
이 프로젝트는 Apache 웹 서버 Droplet을 배포하고 DNS 레코드를 세팅할 것입니다. 이러한 의미로 프로젝트 변수, 디지털 오cean Terraform 제공者, Droplet과 DNS 레코드가 각각 파일에 보관되며, 필수적인 Terraform과 디지털 오cean 제공자 버전은 versions.tf
에 지정되며, Droplet의 이름을 생성하는 Python 스크립트는 external
폴더에 보관되며, HCL 코드와 분리되며 data-sources.tf
에서 동적 데이터 소스로 사용되기 위해 있습니다.
복잡한 구조
대型的 프로젝트에 적용되는 것이 간단한 구조와 대襟의 차이는 명확하며, 这是因为 惯例적인 코드 사이에 다양한 수준의 복잡도를 가지고 있는 명확하게 정의된 서브 디렉터리 구조가 있다. 이러한 모듈은 서로를 의존할 수 있으며, 버전 控制系统과 함께 이러한 프로젝트는 작업 공간을 幅広く 사용할 수 있다. 이러한 方法은 다양한 응용 프로그램을 관리하는 large projects에 적용되며, 가능한 많은 코드를 재사용하여 이를 도울 수 있다.
개발, 的公演, 品質 확인, 생산 인프RASTRUCTURE 인스턴스는 일반적인 모듈을 依存하여 같은 프로젝트에 대하여 다른 디렉터리에 위치할 수 있으며, 이러한 방법으로 중복되는 코드를 제거하고 프로젝트가 중앙적인 真理 소스가 되는 것이다. 다음은 더 복잡한 구조를 가지고 있는 example project의 파일 구조이며, 다양한 배포 응용 프로그램, Terraform 모듈, 그리고 대상 雲 환경을 포함한다.
.
└── tf/
├── modules/
│ ├── network/
│ │ ├── main.tf
│ │ ├── dns.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ └── spaces/
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── applications/
├── backend-app/
│ ├── env/
│ │ ├── dev.tfvars
│ │ ├── staging.tfvars
│ │ ├── qa.tfvars
│ │ └── production.tfvars
│ └── main.tf
└── frontend-app/
├── env/
│ ├── dev.tfvars
│ ├── staging.tfvars
│ ├── qa.tfvars
│ └── production.tfvars
└── main.tf
이러한 方法은 How to Manage Infrastructure with Terraform 시리즈에서 더욱 자세하게 탐구되는 것이다.
이제 Terraform 프로젝트가 무엇인지, 기天主하여 인지하는 복잡도에 따라 가장 좋은 구조를 어떻게 정의하는지, 그리고 Terraform 작업 공간이 어떻게 기능하는지 알았다. 次의 단계에서는 简单的한 구조의 프로젝트를 생성할 것이며, Apache 웹 서버를 설치하고 도메인에 대한 DNS 레코드를 설정하는 것을 예로 하여 Droplet을 배포할 것이다. 먼저 DigitalOcean 제공자와 변수를 이용하여 프로젝트를 초기화하고, 그 다음에 Droplet을 정의하고, 이를 이름을 제공하는 동적 데이터 소스를 정의하고, 배포용 DNS 레코드를 정의할 것이다.
단계 1 — 초기 프로젝트 세팅
이 섹션에서, 당신은 디지털 오cean 터라펌 제공자를 당신의 프로젝트에 추가하고, 프로젝트 변수를 정의하고, 디지털 오cean 제공자 인스턴스를 선언하여 Terraform이 당신의 계정과 연결할 수 있도록 한다.
시작하기 전에, 다음 명령어로 Terraform 프로젝트 디렉터리를 생성한다:
그 곳으로 이동한다:
이 프로젝트는 간단한 구조적 접근法을 따를 것이므로, 제공자, 변수, 돔let, DNS 레코드 코드를 각각의 파일로 분리하여 이전 섹션의 파일 구조를 따라간다. 먼저, DigitalOcean Terraform 제공자를 프로젝트에 필요한 제공자로 추가하여야 한다.
이름이 versions.tf
的 파일을 만들고 다음 명령어를 실행하여 편집할 수 있게 한다:
다음 行을 추가한다:
이 terraform
블록에서, 필요한 제공자(DigitalOcean, 버전 2.x
)를 列挙한다. 완료되면 파일을 저장하고 닫는다.
그 다음, 프로젝트가 노출할 변수를 variables.tf
파일에 정의하고, 다양한 자원 유형을 different code files에 저장하는 접근法을 따라야 한다:
다음 変数을 추가한다:
파일을 저장하고 닫는다.
do_token
변수는 디지털 오cean의 개인 액세스 토큰을 보관하는 것을 대기하고 domain_name
는 您的想要的 도메인 이름을 지정합니다. 배포 드랍LET에 SSH キー가 automaticaly 설치되며, SSH 핸들 방식으로 식별됩니다.
次に, 이 프로젝트를 위한 디지털 오cean 제공자 인스턴스를 정의합니다. 您는 이를 provider.tf
라는 이름의 파일에 보관합니다. editing 하기 위해서는 다음과 같이 실행합니다:
제공자를 추가하세요:
완료 하면 저장하고 나갑니다. 您는 digitalocean
제공자를 정의하고, 이전에 provider.tf
에서 지정한 필요한 제공자와 對応시키며, 인증 토큰의 값을 변수로 설정했습니다. 이를 런타임에 제공하게 됩니다.
이 단계에서는 프로젝트 용 디렉터리를 생성하고, DigitalOcean 제공자가 사용 가능하게 요청하며, 프로젝트 변수를 선언하고, 后来 제공되는 인증 토큰을 사용하여 DigitalOcean 제공자 인스턴스와 연결하는 것을 已完成했습니다. 이제 프로젝트 정의에 대한 동적 데이터를 생성하는 스크립트를 썼습니다.
단계 2 — 동적 데이터를 위한 Python 스크립트 생성
UNIX 기준 시간 형식으로 로컬 머신의 현재 시간과 고정 문자열 web
를 결합하여 Droplet의 이름을 동적으로 생성하고, 이를 해석하기 위한 데이터 소스 자원을 선언합니다. 이름 생성 스크립트는 이름 스키마에 따라 多条目의 Droplet을 생성할 때, 그들을 좀 더 쉽게 구분하기 위해 유용합니다.
스크립트를 external
디렉터리의 name-generator.py
이라는 이름의 파일로 저장할 것입니다. 먼저, 다음과 같이 디렉터리를 생성합니다:
external
디렉터리는 您的 프로젝트의 루트에 위치하며, Python 스크립트와 같은 非HCL 코드 파일을 저장할 것입니다.
name-generator.py
을 external
하에 생성하고 편집하세요:
다음과 같은 코드를 추가하세요:
이 Python 스크립트는 json
및 time
모듈을 導入하고 딕셔너리 result
를 선언하고 실행 중인 머신의 현재 UNIX 시간과 고정 이름 fixed_name
를 결합한 인터polated 문자열의 name
키의 값을 설정합니다. 그 后来, result
가 JSON으로 변환되고 stdout
에 표시되며, 스크립트가 실행되는 때마다 다를 수 있는 출력입니다:
작업이 끝나면 ファイルを保存하고 閉じる必要があります。
注釈: 大きく、複雑な構造化されたプロジェクトは、外部のデータ源の作成と使用には、移植性とエラー処理についてより深く考える必要があります。Terraformは、実行されたプログラムがstderr
に人間が読むことができるエラーメッセージを書いて、非ゼロのステータスでgracefully exitすることを期待しています。これはこのステップで示されていないことに注意してください、因為任务のシンプルさのためです。また、プログラムに副作用がないことを期待しています。これにより、必要な回数だけ再実行できます。
Terraformが期待するように、データ源についての詳細な情報は公式ドキュメントに訪れることができます。
スクリプトが準備されたら、スクリプトからデータを引き出すデータ源を定義することができます。このデータ源を、プロジェクトのルートにあるdata-sources.tf
という名前のファイルに保存します。
編集するために以下のコマンドを実行します。
以下の定義を追加します。
ファイルを保存して閉じます。
このデータ源はdroplet_name
という名前を持ち、external
ディレクトリにあるname-generator.py
スクリプトをPython 3で実行します。それは自動的にその出力をパースし、デシリアライズされたデータをresult
属性に持つresult
属性に持ち、他のリソース定義の中で使用するために提供します。
データ源を宣言した後、Apacheが実行されるDropletを定義することができます。
Schritt 3 — Droplet 정의
이 단계에서, simplestructuring approach를 따라 Droplet 자원의 정의를 쓰고, Droplets를 위한 独自 구조 파일에 저장하게 될 것입니다. 이 이름은 지금 생성한 동적 데이터 소스를 통해 来고, 배포할 때마다 다를 것입니다.
droplets.tf
파일을 만들고 편집하기 위해서는 다음과 같습니다:
다음과 같은 Droplet 자원 정의를 추가합니다:
먼저, DigitalOcean SSH ключ 자원을 ssh_key
라고 이름지어줍니다. 이 이름으로 클라이언트의 계정에서 ключ을 가져올 것입니다. 하이라이트 표시된 코드를 자신의 SSH ключ 이름으로 替え는 것입니다.
그 다음, Droplet 자원을 web
라고 이름지어줍니다. 하늘 clouds에서의 실제 이름이 다릅니다. 왜냐하면 droplet_name
外的 데이터 소스에서 요청되기 때문입니다. Droplet 자원을 SSH ключ로 부팅strap하기 위해서, ssh_key
의 ID를 ssh_keys
매개변수에 넣어줍니다. 그렇게 하면 DigitalOcean가 어느 ключ을 적용해야 하는지 알 수 있습니다.
지금 이제 droplet.tf
와 관련된 설정을 하는 것뿐입니다. 끝났으면 파일을 저장하고 닫으세요.
이제 yoursdomain을 지정한 Droplet로 가리기 위한 DNS 레코드의 구성을 썼습니다.
的第4步 – 定义DNS记录
此过程的最后一步是将DNS记录配置为从您的域名指向Droplet。
您将把DNS配置存储在一个名为dns.tf
的文件中,因为它是您在之前的步骤中创建的其他资源类型之外的独立资源类型。创建并打开以供编辑:
添加以下行:
此代码声明了一个DigitalOcean DNS记录,记录类型为A
,在您的域名下(通过变量传递),名称是@
,这是一个占位符,路由到域名本身,并且记录的值为Droplet IP地址。您可以将name
值更改为其他内容,这将创建一个子域。
完成后,保存并关闭文件。
现在您已经配置了Droplet、名称生成数据源以及DNS记录,接下来我们将把项目部署到云中。
第5步 – 规划和应用配置
이 섹션에서는 당신의 Terraform 프로젝트를 초기화하고 클라우드에 배치합니다. 그리고 모든 것이 설정되었다면 확인합니다.
지금까지 프로젝트 infraSTRUCTURE를 완료했습니다. 남은 것은 이제 部署할 것입니다. 만약 아직 部署하기 위해선 다음과 같은 명령을 실행합니다:
실행시 다음과 같은 결과가 나오게 될 것입니다:
OutputInitializing the backend...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Finding latest version of hashicorp/external...
- Installing digitalocean/digitalocean v2.10.1...
- Installed digitalocean/digitalocean v2.10.1 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
- Installing hashicorp/external v2.1.0...
- Installed hashicorp/external v2.1.0 (signed by HashiCorp)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
이제 당신은 당신의 Droplet를 동적으로 generated 된 이름과 함께 도quetter 계정에 部署할 수 있습니다.
먼저 다음과 같은 명령을 실행하여 도quetter 프로젝트를 초기화합니다. 이후 다음과 같은 명령을 실행합니다:
당신의 API 토큰은 도quetter 관리 패널에서 찾을 수 있습니다.
다음으로 변수를 정의して 매개 변수로 사용할 수 있습니다. 다음과 같은 명령을 실행합니다:
실행시 다음과 같은 결과가 나오게 될 것입니다:
OutputTerraform 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:
# digitalocean_droplet.web will be created
+ resource "digitalocean_droplet" "web" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ id = (known after apply)
+ image = "ubuntu-20-04-x64"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (known after apply)
+ locked = (known after apply)
+ memory = (known after apply)
+ monitoring = false
+ name = "web-1625908814"
+ price_hourly = (known after apply)
+ price_monthly = (known after apply)
+ private_networking = (known after apply)
+ region = "fra1"
+ resize_disk = true
+ size = "s-1vcpu-1gb"
+ ssh_keys = [
+ "...",
]
+ status = (known after apply)
+ urn = (known after apply)
+ vcpus = (known after apply)
+ volume_ids = (known after apply)
+ vpc_uuid = (known after apply)
}
# digitalocean_record.www will be created
+ resource "digitalocean_record" "www" {
+ domain = "your_domain'"
+ fqdn = (known after apply)
+ id = (known after apply)
+ name = "@"
+ ttl = (known after apply)
+ type = "A"
+ value = (known after apply)
}
Plan: 2 to add, 0 to change, 0 to destroy.
...
이들은 모두 생성될 것입니다. 따라서 다음과 같은 명령을 실행합니다:
출력은 이전과 같이 나오겠지만, 이번에는 다음과 같은 단계들을 취한다는 것을 보여주는 것들이 있습니다:
OutputPlan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: `yes`
Enter yes
, and Terraform will provision your Droplet and the DNS record:
Outputdigitalocean_droplet.web: Creating...
...
digitalocean_droplet.web: Creation complete after 33s [id=204432105]
digitalocean_record.www: Creating...
digitalocean_record.www: Creation complete after 1s [id=110657456]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Terraform은 지금 배포 한 리소스들을 그 상태에 기록했습니다. DNS 레코드와 Droplet이 성공적으로 연결되었는지 확인하려면, 로컬 상태에서 Droplet의 IP 주소를 추출하고, 당신의 도메인의 公 DNS 레코드와 일치하는지 확인할 수 있습니다. IP 주소를 얻기 위한 다음 명령을 실행하십시오.
Droplet의 IP 주소를 받을 것입니다:
Outputipv4_address = "your_Droplet_IP"
...
公 A 레코드를 조회하기 위해서는 다음과 같이 실행합니다:
출력은 A 레코드가 지정한 IP 주소를 보여드릴 것입니다:
OutputAddress: your_Droplet_IP
그들은 서로 같은 것입니다, 이는 Droplet과 DNS 레코드가 성공적으로 설정되었음을 의미합니다.
다음 단계의 변경사항을 실제izar하기 위해서는, 다음 명령을 실행하여 배포 한 리소스를 nis跷하십시오:
추가 정보가 요망하면 yes
를 입력하십시오:
이 단계에서는 당신은 인프라스트럭트를 생성하고 DigitalOcean 계정에 적용했습니다. 이제 Terraform provisional 어셈블리를 사용하여 지정한 Droplet에 Apache 웹 서버를 자동으로 설치하는 것을 수정하겠습니다.
단계 6 — 프로비저ancer 사용하여 코드 실행
이제 당신은 remote-exec
프로비저ancer를 사용하여 사용자 정의 명령을 실행하여 배포 한 Droplet에 Apache 웹 서버를 설치하는 것을 지정할 것입니다.
Terraform 프로비저ancer(provider)를 사용하여 생성한 리모ote 리소스(remote-exec 프로비저ancer)에 대한 특정 동작을 실행할 수 있으며, 코드가 실행되는 로컬 머신(local-exec 프로비저ancer)에 대해도 동작을 수행할 수 있습니다. 프로비저ancer가 실패하면, 현재 상태에서 노드가 tainted로 표시되며, 이는 다음 실행 시 지워지고 다시 생성될 것입니다.
Terraform이 프로비저anded Droplet에 연결하기 위해서는 Droplet에 설정한 개인 SSH клю의 場所를 알고 있어야 합니다. 개인 키의 위치를 전달하는 가장 좋은 방법은 변수를 사용하는 것입니다. 따라서 variables.tf
파일을 편집하는 것을 시작하세요.
하이라이트 된 行을 추가합니다.
지금 이제 private_key
라는 이름의 새로운 변수를 프로젝트에 추가했습니다. 파일을 저장하고 닫으세요.
次に, 로컬 머신의 연결 데이터와 리모ote 프로비저ancer 선언을 Droplet 구성에 추가합니다. droplets.tf
파일을 편집하기 위해 다음 명령을 실행하세요.
하이라이트 된 行을 기존 코드에 추가합니다.
connection
ブロック은 Terraform이 대상 Droplet에 대해 어떻게 연결할지 지정하며, provisioner
ブロック은 프로비저ancer 이후에 실행할 명령어 ARRAY를 inline
매개 변수를 통해 포함합니다. つまり, パッケージ 관리자 キャッシュを 갱신하고 Apache를 설치하는 것입니다. 작업을 끝내고 저장하세요.
개인 키 경로를 위한 임시 환경 변수를 만들 수도 있습니다.
사용자 주의: 개인 키가 있는 것과 Terraform 내에서 로드하고자 하는 모든 기타 파일은 프로젝트 내에 places 해야 합니다. Linux 서버에 SSH 키 기반 인증을 구성하는 방법 튜토리얼을 보시면 Ubuntu 20.04 또는 다른 배포를 사용하여 SSH 키 세팅 정보를 더 많이 알 수 있습니다.
다시 구성을 적용해 보십시오:
Query가 들어오면 yes
를 입력하십시오. 이전과 마찬가지로 출력을 받으며, remote-exec
프로비저닝 기능에서 长得 출력이 이어지게 합니다:
Outputdigitalocean_droplet.web: Creating...
digitalocean_droplet.web: Still creating... [10s elapsed]
digitalocean_droplet.web: Still creating... [20s elapsed]
digitalocean_droplet.web: Still creating... [30s elapsed]
digitalocean_droplet.web: Provisioning with 'remote-exec'...
digitalocean_droplet.web (remote-exec): Connecting to remote host via SSH...
digitalocean_droplet.web (remote-exec): Host: ...
digitalocean_droplet.web (remote-exec): User: root
digitalocean_droplet.web (remote-exec): Password: false
digitalocean_droplet.web (remote-exec): Private key: true
digitalocean_droplet.web (remote-exec): Certificate: false
digitalocean_droplet.web (remote-exec): SSH Agent: false
digitalocean_droplet.web (remote-exec): Checking Host Key: false
digitalocean_droplet.web (remote-exec): Connected!
...
digitalocean_droplet.web: Creation complete after 1m5s [id=204442200]
digitalocean_record.www: Creating...
digitalocean_record.www: Creation complete after 1s [id=110666268]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
이제 웹 브라우저에서 도메인으로 이동할 수 있습니다. 기본적인 Apache welcom 页面을 볼 수 있습니다.
이것은 Apache가 성공적으로 설치되었고, Terraform이 모든 것을 correctl 프로비저닝했다는 것을 의미합니다.
지정한 자원을 销毁하려면 다음 명령을 실행하고 Query가 들어오면 yes
를 입력하십시오:
이제 Drople 에서 Apache 웹 서버를 배포하고 기治病 도메인에 대한 DNS 레코드를 세팅하는 간단한 Terraform 프로젝트를 완료했습니다.
결론
simplified structuring approach를 따르고 remote-exec
프로비저닝러를 사용하여 명령어를 실행하여 Apache를 실행하는 Droplet을 배포하고 도메인의 DNS 레코드를 정의하였습니다.
참고 용도로, 이 튜orial에서 생성한 프로젝트의 파일 구조가 다음과 같습니다:
.
└── tf/
├── versions.tf
├── variables.tf
├── provider.tf
├── droplets.tf
├── dns.tf
├── data-sources.tf
└── external/
└── name-generator.py
정의한 자원(Droplet, DNS 레코드와 동적 데이터 소스, DigitalOcean 프로바이더와 변수)는 모두 간단한 프로젝트 구조를 정의하는 이 튜orial의 첫 secton에서 나타낸 것一样 각각 独自 파일에 저장되었습니다.
Terraform 프로비저닝러와 그들의 パラメ터에 대한 더 많은 정보는 공식 文档을 방문하십시오.
이 튜orial은 Terraform을 처음 설치하는 것을 포함하여 複雑한 프로젝트를 관리하는 것을 포함한 Terraform에 대한 다양한 주제를 다룹니다.
Source:
https://www.digitalocean.com/community/tutorials/how-to-structure-a-terraform-project