๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Development(Web, Server, Cloud)/22) LINUX - Cloud

ํด๋ผ์šฐ๋“œ 58์ผ์ฐจ

by tonyhan18 2022. 3. 29.
728x90

ํ…Œ๋ผํผ HCL module

Modules Overview - Configuration Language | Terraform by HashiCorp

 

Modules Overview - Configuration Language | Terraform by HashiCorp

Modules are containers for multiple resources that are used together in a configuration. Find resources for using, developing, and publishing modules.

www.terraform.io

tedilabs/terraform-aws-network: ๐ŸŒณ A sustainable Terraform Package which creates Network resources on AWS (github.com)

 

GitHub - tedilabs/terraform-aws-network: ๐ŸŒณ A sustainable Terraform Package which creates Network resources on AWS

๐ŸŒณ A sustainable Terraform Package which creates Network resources on AWS - GitHub - tedilabs/terraform-aws-network: ๐ŸŒณ A sustainable Terraform Package which creates Network resources on AWS

github.com

์œ„ ๊นƒํ—™์˜ modules์— ๋“ค์–ด๊ฐ€๋ณด์ž.

 

tedilabs/fastcampus-devops: ๐Ÿš€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ๋ฐ๋ธŒ์˜ต์Šค ์ดˆ๊ฒฉ์ฐจ ์ฝ”์Šค ์ž๋ฃŒ (github.com)

 

GitHub - tedilabs/fastcampus-devops: ๐Ÿš€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ๋ฐ๋ธŒ์˜ต์Šค ์ดˆ๊ฒฉ์ฐจ ์ฝ”์Šค ์ž๋ฃŒ

๐Ÿš€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ๋ฐ๋ธŒ์˜ต์Šค ์ดˆ๊ฒฉ์ฐจ ์ฝ”์Šค ์ž๋ฃŒ. Contribute to tedilabs/fastcampus-devops development by creating an account on GitHub.

github.com

์•”ํŠผ ์˜ค๋Š˜์€ ์œ„์— ๊ฒƒ์„ ์‚ฌ์šฉํ•ด๋ณด์ž

 

2-terraform/04-module์— ์žˆ๋Š” main.tf ํŒŒ์ผ์„ ํ™•์ธํ•ด๋ณด์ž

 

Module Sources | Terraform by HashiCorp

 

Module Sources | Terraform by HashiCorp

The source argument tells Terraform where to find child modules's configurations in locations like GitHub, the Terraform Registry, Bitbucket, Git, Mercurial, S3, and GCS.

www.terraform.io

Local, Terraform Registry, Github์ค‘ ํ•œ๊ณณ์—์„œ module์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

Module ์€ ํ•œ๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ .tf ๋˜๋Š” .tf.json ํŒŒ์ผ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, module ์— ๋”ฐ๋ผ ํ•œ๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ resource ๋“ค์„ ํฌํ•จํ•œ๋‹ค.
module ๋‚ด์˜ ํŒŒ์ผ๋“ค์€ ํ•œ๊ฐœ์˜ directory ์— ๋ชจ๋‘ ์œ„์น˜ํ•œ๋‹ค.
module ์€ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์ผ์ข…์˜ library ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” library ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๋“ฏ์ด,
์—ฌ๋Ÿฌ resource ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” module ์„ ๋งŒ๋“ค์–ด์„œ ์›ํ•˜๋Š” ๊ณณ์—์„œ ์›ํ•˜๋Š” resource ๋“ค์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

module ์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • Root module - Terraform command ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” directory ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค๋กœ ๊ตฌ์„ฑ๋œ module ์„ Root module ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • Child module - ๋‹ค๋ฅธ module (Root module ํฌํ•จ) ์—์„œ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š” module ์„ Child module ์ด๋ผ๊ณ  ํ•œ๋‹ค.
    Child module ์€ ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœ๋˜์–ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ณ  module ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ configuration ๊ฐ’์„ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์„œ๋ธŒ๋„ท์€ ๋ชฉ์ ์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ ๊ฐ€์šฉ์˜์—ญ ๋ณ„๋กœ ๋˜‘๊ฐ™์€ ๋ชฉ์ ์˜ ์„œ๋ธŒ๋„ท์ด ์ค‘๋ณต๋˜์–ด ์ƒ์„ฑ๋˜๋Š”๋ฐ ์ด๊ฑธ ์œ„ํ•ด ์„œ๋ธŒ๋„ท ๊ทธ๋ฃน์„ ์ƒ์„ฑํ–ˆ๋‹ค. ์ด๊ฑด public ๋ชฉ์ ์˜ ์„œ๋ธŒ๋„ท์ด๋‹ค.

 

์ด ์„œ๋ธŒ๋„ท์€ module.vpc.id์™€ ์—ฐ๊ฒฐ๋˜์–ด fastcampus vpc ๋‚ด์— ์„œ๋ธŒ๋„ท์ด ์ƒ์„ฑ๋˜๊ฒŒ ๋˜๊ณ  public vpc์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์„œ๋ธŒ๋„ท์—์„œ ์ƒ์„ฑ๋œ ec2 ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด์„œ public ip๊ฐ€ ์ž๋™ ํ• ๋‹น๋˜๋„๋ก ํ•˜์˜€๋‹ค.

 

์ด ์•ˆ์—๋Š” ๋‘๊ฐ€์ง€ ์„œ๋ธŒ๋„ท์„ ์œ„์น˜์‹œํ‚ค์—ˆ๋‹ค. ํ•˜๋‚˜๋Š” 10.0.0.0/24 ์˜ az1์— ์œ„์น˜์‹œํ‚ค๊ณ 

๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” 10.0.1.0/24์˜ az2๋กœ ์œ„์น˜์‹œํ‚ค์—ˆ๋‹ค.

 

private4 subnet๋„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

 

public subnet๋“ค์„ ์œ„ํ•œ public route table์ด๋‹ค.

 

์—ฌ๊ธฐ์—์„œ๋Š” public subnet group๋“ค์˜ id๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  VPC์˜ IGW๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด์„œ ํ†ต์‹ ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

private route table์€ nat gateway๋‚˜ nat instance์— ๋Œ€ํ•œ ์žฅ๋น„๋ฅผ ๋‹ฌ์•„์ฃผ๋Š”๋ฐ ๋น„์šฉ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— private route table๋งŒ ๋‹ฌ์•„์ฃผ์—ˆ๋‹ค.

```

terraform init -> terraform apply

```

---

 

ํ…Œ๋ผํผ HCL variable & local & output

 

์œ„์™€๊ฐ™์ด variable์ด๋ผ๋Š” ๊ฒƒ์„ ์ด์šฉํ•ด์„œ ์ด๋ฆ„์„ ์ง€์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฑธ ๊ทธ๋ƒฅ applyํ•˜๋ฉด ์œ„์™€๊ฐ™์ด ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ถ€๋ถ„์ด ๋‚˜์˜จ๋‹ค.

 

์ด๊ฑธ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์ •์˜ ๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์กด์žฌํ•˜๋Š”๋ฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ™˜๊ฒฝ๋ณ€์ˆ˜์ด๋‹ค.

 

Input Variables - Configuration Language | Terraform by HashiCorp

 

Input Variables - Configuration Language | Terraform by HashiCorp

Input variables allow you to customize modules without altering their source code. Learn how to declare, define, and reference variables in configurations.

www.terraform.io

 

```

EXPORT TF_VAR_vpc_name="test"

```

๋ผ๊ณ  ์ฝ˜์†”์— ๊ทธ๋ƒฅ ์ž…๋ ฅํ•œ๋‹ค์Œ terraform apply๋ฅผ ์‹œ๋„ํ•ด๋ณด์ž

 

tony๊ฐ€ test๊ฐ€ ๋˜๋ ค๊ณ  ํ•œ๋‹ค.

 

vpc ์ด๋ฆ„๋“ค์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.

 

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์™ธ์—๋„ ํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ ํ•ด๋ณด์ž

 

test.tfvars ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ

 

๋‚ด์šฉ์„ ๋„ฃ์–ด์ฃผ๊ณ 

 

```

unset TF_VAR_vpc_name

terraform apply -var-file="test.tfvars"

```

 

์œ„์™€๊ฐ™์ด ํŒŒ์ผ๋ช…๊นŒ์ง€ ์ •ํ•ด์ฃผ์–ด์•ผ ์ œ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค.

 

์™œ๋ƒํ•˜๋ฉด ํŒŒ์ผ๋ช…์ด test.tfvars๋ผ์„œ ๊ทธ๋ ‡๋‹ค.

ํŒŒ์ผ๋ช…์ด terraform.tfvars๋กœ ์ •ํ•ด์ฃผ๋ฉด -var-file ์—†์ด๋„ ์ ์šฉ๋  ๊ฒƒ์ด๋‹ค.

 

์ด๊ฒƒ๋„ ๋˜ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ๋„ ๋˜๊ฒŒํ•˜๋ ค๋ฉด ํŒŒ์ผ๋ช…์„

test.auto.tfvars๋กœ ์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๊ทธ๋ƒฅ ์šฐ๋ฆฌ๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

์œ„์™€๊ฐ™์ด -var ํƒœ๊ทธ๋กœ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋ณ€์ˆ˜์™€ ๊ฐ’์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

description์€ ์ด๊ฑธ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์„ค๋ช…

type์€ tf๊ฐ€ ์•Œ์•„์„œ ์ •ํ•ด์ฃผ์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜

default๋Š” ๊ฐ’์ด ์ž…๋ ฅ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์ด๋‹ค.

 

Local Value

์ง€์—ญ๋ณ€์ˆ˜

Local Values - Configuration Language | Terraform by HashiCorp

 

Local Values - Configuration Language | Terraform by HashiCorp

Local values assign a name to an expression that can be used multiple times within a Terraform module.

www.terraform.io

 

์ด๊ฑธ ์ด์šฉํ•ด์„œ vpc์˜ tags๋ถ€๋ถ„์— locals๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋งŒ๋“ค์ž

 

Owner, Project ๋ถ€๋ถ„์— ์šฐ๋ฆฌ๊ฐ€ ์ง€์ •ํ•œ ๊ฐ’์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

output์€ terraform module์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ• ๋•Œ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’์ด output ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

ํ˜„์žฌ๋กœ๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

output ์„ธ๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์ž

 

๋ณ€ํ•œ๊ฒƒ์€ ์—†์ง€๋งŒ Output์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

์ถ”๊ฐ€๋กœ ์œ„์™€ ๊ฐ™์ด subnet_group__public ์ „์ฒด๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž

 

subnet์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฒˆ์—๋Š” ๋‘๊ฐœ๋ฅผ ๋ฌถ์–ด์„œ ์ถœ๋ ฅํ•ด๋ณด์ž.

 

๊ทธ๋Ÿฌ๋ฉด ๊ฐ์ž์— ๋งž์ถ”์–ด์„œ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๊ฒƒ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

๊ทธ์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์†์„ฑ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

value๋Š” ํ•„์ˆ˜์ธ๋ฐ

description, sensitive, depends_on์€ ์„ ํƒ์ ์ด๋‹ค.

 

ํŠน๋ณ„ํžˆ ๋ญ๊ฐ€ ๋‚˜์˜ค๋Š”๊ฑด ์•„๋‹ˆ๊ณ  ๊ทธ๋ƒฅ ์ฃผ์„๊ณผ๋„ ๊ฐ™์€ ๋Š๋‚Œ์˜ ๋ฌผ๊ฑด์ด๋‹ค.

 

์ž ๊ฐ์ž๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋น„๊ตํ•ด๋ณด์ž

tf workspace module -> function

variagble -> argument

local -> local variable

ouput -> return value

 

 

ํ…Œ๋ผํผ HCL count & for_each

์œ„์™€๊ฐ™์ด user์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ํ•ด๋†“์•˜๋‹ค.

๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ provider๋Š” aws๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ง€์—ญ

resource๋Š” ๊ทธ๋•Œ๊ทธ๋•Œ ๋‹ค๋ฅด์ง€๋งŒ aws์˜ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ด์šฉํ• ์ง€๋ฅผ ์ด์•ผ๊ธฐํ•œ๋‹ค.

IAM์˜ ์‚ฌ์šฉ์ž ๋ถ€๋ถ„์— ์ถ”๊ฐ€๋˜์–ด์žˆ๋‹ค.

 

๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง์— ๋”ฐ๋ผ์„œ ์ด๊ฑธ ๋งŒ๋“œ๋Š”๊ฒŒ ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์•„์ง„๋‹ค.

 

๊ทธ๋ž˜์„œ terraform count ๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด๋ณด์ž.

count๋Š” resource, data, module ๋ชจ๋‘ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

728x90