ํ ๋ผํผ 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
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์ ๋ค์ด๊ฐ๋ณด์.
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 ๋ชจ๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
'Development(Web, Server, Cloud) > 22) LINUX - Cloud' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํด๋ผ์ฐ๋ ํ๋ก์ ํธ 1-2 - docker, react, express, mysql, k8s, ansible ์ด๊ฒ ๋ชจ๋... (0) | 2022.03.30 |
---|---|
ํด๋ผ์ฐ๋ ํ๋ก์ ํธ1 - docker, react, express, mysql, k8s, ansible ์ด๊ฒ ๋ชจ๋... (0) | 2022.03.29 |
ํด๋ผ์ฐ๋ 57์ผ์ฐจ (0) | 2022.03.27 |
ํด๋ผ์ฐ๋ 56 ์ผ์ฐจ (0) | 2022.03.25 |
ํด๋ผ์ฐ๋ 55์ผ์ฐจ (0) | 2022.03.24 |