하루를 보낼 지형 지식
27582 단어 automationgithubterraformtutorial
AWS, Azure, Google 클라우드 계정이 있다고 가정하고 싶지 않지만, GitHub 계정이 더 현실적인 것 같습니다.
이 글은 네가 installed Terraform on your system이라고 가정해 봐.
CLI
Terraform이 설치되어 있으므로 터미널에서
terraform
을 실행할 수 있습니다.이 자습서의 경우 다음 버전을 실행하겠습니다.❯ terraform version
Terraform v0.14.10
공급자
Terraform Providers은 타사 공급업체와 통합할 수 있는 확장 팩과 유사합니다.registry을 보고 프로젝트에 필요한 공급자를 선택할 수 있습니다.네가 예상한 바와 같이 모든 주요 클라우드 공급업체가 거기에 있다.
본 강좌에서 우리는 GitHub provider을 사용할 것이다.
지형 코드를 추가하기 시작할 수 있도록 폴더를 계속 만듭니다.
mkdir tf-github-admin
이 폴더에 provider.tf
이라는 파일을 만들고 GitHub 제공 프로그램을 정의합니다.다음을 포함하는 파일을 만듭니다.provider "github" {
token = var.github_token
owner = var.github_org
}
여기서 provider
키워드의 값은 github
입니다.이 자원 블록에서, 우리는 두 개의 표지부 (왼쪽) 를 정의했는데, 그것들의 값은 두 변수 (오른쪽) 에서 나온다.잠시 후 variables에 대한 더 많은 정보를 제공할 것입니다.지금
terraform init
을 실행하면 Terraform에서 필요한 공급자 코드를 다운로드하고 다음 출력을 표시합니다.❯ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/github...
- Installing hashicorp/github v4.6.0...
- Installed hashicorp/github v4.6.0 (signed by HashiCorp)
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.
이 코드를 버전 제어 리포에 제출할 것이라고 가정합니다. 따라서 .terraform.lock.hcl
파일을 제출하는 건의에 따라 주십시오.이제 다음 파일과 폴더가 있어야 합니다.
❯ ls -1a
.
..
.terraform
.terraform.lock.hcl
provider.tf
현재 terraform plan
의 출력에서 말한 대로 init
을 실행하면 변화가 없는 응답을 볼 수 있습니다.인프라가 최신이다.변수를 정의하기 시작합시다.
변량
변수 블록을 사용하면 코드에 사용할 변수를 정의할 수 있습니다.다음 구성을 사용하여
vars.tf
파일을 만듭니다.variable "github_token" {
type = string
description = "The access token to GitHub"
}
variable "github_org" {
type = string
description = "The GitHub organisation"
default = "benmatselby" # You should change this to your username!
}
variable "github_repos" {
type = map
description = "All our repos we want to manage using Terraform"
default = {
tfgithubadmin = {
"name" : "tf-github-admin",
"description" : "The Terraform configuration to manage GitHub repos",
"topics" : ["terraform", "automation"],
"archived": false
},
}
}
위의 구성에는 세 가지 변수가 정의되어 있습니다.github_token
- GitHub에 가입할 수 있는 권한을 부여받은 Personal Access Token (PAT)입니다.github_org
- 환매 협의의 소유자로 조직(예를 들어 github)일 수도 있고 사용자(예를 들어 benmatselby)일 수도 있다.GitHub 계정으로 변경되었는지 확인하십시오.github_repos
- 이것은 약간 복잡한 변수이다.이것은 일종의 매핑 변수 유형이다.그것은 우리가 관리하고자 하는 모든 환매 협의의 설정을 가지고 있다.type
, description
및 default
속성을 정의하고 있습니다.이러한 속성은 정의할 필요가 없으며 빈 블록으로 변수를 정의할 수 있습니다.그러나 description
필드에 변수를 명확하게 설명해 보십시오. 이것은 미래에 도움이 될 것입니다.이제 GitHub repo를 관리하는 데 필요한 변수가 생겼습니다. GitHub repo를 관리하는 자원 블록을 정의하기 시작합니다.
자원 블록
본 강좌의 목적은 Terraform을 통해 GitHub 리콜을 관리하고 위에서 정의한
github_repos
변수 제어 설정을 통해따라서 github_repos
변수를 교체하고 GitHub와 통신할 수 있는 자원 블록을 정의해야 합니다.repos.tf
이라는 파일을 만들고 다음을 포함합니다.resource "github_repository" "repos" {
for_each = var.github_repos
name = each.value["name"]
description = each.value["description"]
archived = each.value["archived"]
// Settings
visibility = "private"
has_downloads = true
has_issues = true
has_wiki = true
vulnerability_alerts = true
// Merge settings
allow_merge_commit = true
allow_squash_merge = false
allow_rebase_merge = false
delete_branch_on_merge = true
// Topics
topics = each.value["topics"]
}
우리 이 자원 블록을 좀 분해합시다.resource "github_repository" "repos" {
}
이것은 resource
유형의 github_repository
을 정의했고 명칭은 repos
이다.resource
은 언어 구조의 일종이다.github_repository
모델은 github
공급업체 wedefined earlier에서 나왔습니다.repos
은 우리가 자원에 지어준 이름입니다.우리는 코드 라이브러리의 다른 곳에서 이 이름을 인용할 수 있다. for_each = var.github_repos
name = each.value["name"]
나는 왜 그런지 모르겠지만, 내가 처음으로 Terraform을 사용하기 시작했을 때, 나는 이 점을 하기가 매우 어려웠다.괄호가 없어서 그런가?첫 번째 줄은 github_repos
에서 정의한 vars.tf
변수를 사용하는 순환을 만드는 것입니다.그리고
name
표지부의 값이 each.value["name"]
이라는 것을 볼 수 있다.우리의 변수를 바탕으로 순환의 첫 번째 교체는name가 tf-github-admin
과 같다.리소스 블록에 정의된 기타 식별자는
github
Provider에서 제공합니다.만약 VS 코드를 사용한다면, 일부 코드가 기능을 완성하도록 HashiCorp Terraform 플러그인을 설치하는 것을 권장합니다.사실상 Terraform Language Server을 처리하는 모든 편집기는 같은 기능을 제공할 것이다.내가 보기에 코드를 완성하면 이런 것들을 배우는 것이 훨씬 쉬워질 것이다.현재 우리는 주요 구성 요소를 정의했으니, 이것을 실행해 봅시다.
이 일을 관리하다
여기에는
plan
과 apply
의 두 가지 명령이 있다.계획
plan
명령은 apply
을 사용할 때 Terraform이 무엇을 할 계획인지 설명합니다.이제 코드가 있는 폴더에서 terraform plan
을 실행하겠습니다.❯ terraform plan
var.github_token
The access token to GitHub
Enter a value: your-pat
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# github_repository.repos["tfgithubadmin"] will be created
+ resource "github_repository" "repos" {
+ allow_merge_commit = true
+ allow_rebase_merge = false
+ allow_squash_merge = false
+ archived = false
+ default_branch = (known after apply)
+ delete_branch_on_merge = true
+ description = "The Terraform configuration to manage GitHub repos"
+ etag = (known after apply)
+ full_name = (known after apply)
+ git_clone_url = (known after apply)
+ has_downloads = true
+ has_issues = true
+ has_wiki = true
+ html_url = (known after apply)
+ http_clone_url = (known after apply)
+ id = (known after apply)
+ name = "tf-github-admin"
+ node_id = (known after apply)
+ private = (known after apply)
+ repo_id = (known after apply)
+ ssh_clone_url = (known after apply)
+ svn_url = (known after apply)
+ topics = [
+ "automation",
+ "terraform",
]
+ visibility = "private"
+ vulnerability_alerts = true
}
Plan: 1 to add, 0 to change, 0 to destroy.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
여기서 세 가지를 소개하고 싶습니다.var.github_token
- 우리는 vars.tf
에서 github_token
이라는 변수를 정의했는데 이 변수는 기본값이 없다.따라서 terraform plan
명령은 값이 얼마인지 묻습니다.다행히도, 우리는 터미널에서 이 기능을 실행하고 있기 때문에, 우리는 값을 제공할 수 있다.자동화 서버에서 이것을 실행하고 싶다면 terraform plan --var github_token=your-token
을 실행할 수 있습니다.이렇게 하면 일시정지가 중지되고 입력이 기다려집니다.apply
을 실행할 때 발생하는 "차이점"을 확인할 수 있습니다.우리의 출력에서 당신은 모든 내용이 +
이라는 것을 볼 수 있습니다. 왜냐하면 우리는 처음으로 환매 협의를 창설했기 때문입니다.terraform plan --help
을 실행하여 무엇을 할 수 있는지 확인하십시오.신청하다.
기본적으로
apply
명령은 하나의 계획을 출력하기 때문에 매번 terraform plan
을 실행할 필요가 없습니다.다음 명령을 실행합니다.
❯ terraform apply
var.github_token
The access token to GitHub
Enter a value: your-pat
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# github_repository.repos["tfgithubadmin"] will be created
+ resource "github_repository" "repos" {
+ allow_merge_commit = true
+ allow_rebase_merge = false
+ allow_squash_merge = false
+ archived = false
+ default_branch = (known after apply)
+ delete_branch_on_merge = true
+ description = "The Terraform configuration to manage GitHub repos"
+ etag = (known after apply)
+ full_name = (known after apply)
+ git_clone_url = (known after apply)
+ has_downloads = true
+ has_issues = true
+ has_wiki = true
+ html_url = (known after apply)
+ http_clone_url = (known after apply)
+ id = (known after apply)
+ name = "tf-github-admin"
+ node_id = (known after apply)
+ private = (known after apply)
+ repo_id = (known after apply)
+ ssh_clone_url = (known after apply)
+ svn_url = (known after apply)
+ topics = [
+ "automation",
+ "terraform",
]
+ visibility = "private"
+ vulnerability_alerts = true
}
Plan: 1 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 키를 누르십시오.
만약 영패가 유효하고 우리가 모든 내용을 정확하게 정의했다면 우리는 다음과 같은 출력을 받아야 한다.
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
github_repository.repos["tfgithubadmin"]: Creating...
github_repository.repos["tfgithubadmin"]: Creation complete after 9s [id=tf-github-admin]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
GitHub 계정을 찾으면 tf-github-admin
이라는 새로운 환매 프로토콜을 볼 수 있을 것입니다.잘했어. Terraform을 사용하여 GitHub 환매 프로토콜을 만들었어.
더 많은 옵션은
terraform apply --help
을 실행하여 무엇을 할 수 있는지 확인하십시오.구성 업데이트
이제 어떤 파일이 있는지 살펴보겠습니다.
❯ la -1a
.
..
.terraform
.terraform.lock.hcl
provider.tf
repos.tf
terraform.tfstate
vars.tf
지금 보시면 terraform.tfstate
파일이 있습니다.이 글은 주에 깊이 들어가는 것이 너무 많기 때문에 official documentation을 읽으세요.본문에서 우리가 사용하는 것은'지방정부'라는 것을 주의해 주십시오.State는 우리가 만든 자원에 대한 모든 정보를 저장합니다.이 경우 상태 파일은 컴퓨터에 저장됩니다.이 상태 파일을 잃어버리면 재구매를 관리하기 위해 상태를 다시 가져와야 합니다.본고의 목적에서 이 파일을 버전 제어 시스템에 제출할 수 있습니다.그럼에도 불구하고 우리가 지금 이 환매협정을 보관할 수 있는지 살펴보자. 그러면 행동상의 변화를 볼 수 있을 것이다.
vars.tf
파일을 열고 "archived": false
을 "archived": true
으로 변경합니다.현재
terraform apply
을 실행하고 있습니다.다음 계획을 보셔야 합니다.❯ terraform apply
var.github_token
The access token to GitHub
Enter a value: your-pat
github_repository.repos["tfgithubadmin"]: Refreshing state... [id=tf-github-admin]
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# github_repository.repos["tfgithubadmin"] will be updated in-place
~ resource "github_repository" "repos" {
~ archived = false -> true
id = "tf-github-admin"
name = "tf-github-admin"
~ vulnerability_alerts = false -> true
# (24 unchanged attributes hidden)
}
Plan: 0 to add, 1 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 키를 누르십시오.그러면 재구매 계약이 아카이브되고 로컬 상태가 업데이트됩니다.
재구매 계약 삭제
이 강좌의 마지막 단계는 환매 협의를 삭제하는 것이다.
vars.tf
을 열고 github_repos
변수를 다음과 같이 업데이트합니다.variable "github_repos" {
type = map
description = "All our repos we want to manage using Terraform"
default = {}
}
이것은 기본적으로 Terraform에 환매 협의를 취소하라고 알려줄 것이다.현재
terraform apply
을 실행하고 있습니다.알림이 나타나면 "예"라고 대답하고 enter 키를 누르면 변경 사항을 적용합니다.github_repository.repos["tfgithubadmin"]: Destroying... [id=tf-github-admin]
github_repository.repos["tfgithubadmin"]: Destruction complete after 0s
Apply complete! Resources: 0 added, 0 changed, 1 destroyed.
좋습니다. Terraform에서 자원 관리의 전체 생명 주기: 창설, 업데이트, 삭제를 완료했습니다.하급
만약 당신이 이것을 다음 단계로 끌어올리고 싶다면 당신은 다음과 같이 할 수 있습니다.
에피소드
This is a good link Terraform 파일에 대해 알고 싶으면
.gitignore
파일을 사용하십시오.따로 만나다
사진 출처: Paweł Czerwiński, Unsplash에서 촬영
Reference
이 문제에 관하여(하루를 보낼 지형 지식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/benmatselby/terraform-knowledge-to-get-you-through-the-day-17kk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)