본문 바로가기

네트워크 & 클라우드/자동화

Terraform 기초 9.1 - Module

Module


- module은 기능을 정의하고 Library 처럼 사용하는 것을 말한다.

  테스트를 해보니 기존의 있는 소스를 땡겨와서 변수 값만 바꿔서 사용하는 컨셉이었다.

- Product, Dev, Stage 환경에서 각각의 소스코드를 사용하는 것보다, module을 사용하여 기존 소스코드를 재활용하자.

- terraform command를 수행하는 root module 과 다른 module에서 호출해서 사용하는 child module 이 있다.

- module은 직접 작성해도 되고(local path), terraform registry에서 제공하는 것을 가져다 써도 된다.

  아래는 terraform registry 정보다.

  (https://registry.terraform.io/modules/terraform-aws-modules/)

- 다만, 외부 module을 사용할 경우 이슈에 대한 대응이 어려울 수 있으므로, 되도록 직접 작성한 module 혹은 외부 module을 복사해서 커스텀하여 사용하는 것이 좋다.

 

다양한 submodules도 지원한다.

 

- ssh submodule을 선택해보자. 자세한 코드는 Source Code인 github 주소를 클릭해본다.

ssh submodule
github source code

 


실습 


- local path를 이용한 module 실습을 진행해보자.

- 어거지로 모듈을 나눴다. input 모듈을 통해 ec2 view권한과, ec2 full 권한을 적용한 유저를 생성해보겠다.

 

[mgmt]

 - 유저 생성 시 ec2:* 인라인 권한을 적용함

 
# /mgmt/main.tf

resource "aws_iam_user" "tf_mgmt_user" {
    name = var.name
}

resource "aws_iam_user_policy" "tf_mgmt_policy" {
    name = "mgmt_test"
    user = aws_iam_user.tf_mgmt_user.name
    policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "ec2:*",
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}
# /mgmt/variables.tf

variable "name" {
    description = "new user name"
    type = string
}

 

[view]

 - 유저 생성 시 ec2:describe* 인라인 권한을 적용함

 
# /view/main.tf

resource
"aws_iam_user" "tf_view_user" {
    name = var.name
}

resource "aws_iam_user_policy" "tf_view_policy" {
    name = "view_test"
    user = aws_iam_user.tf_view_user.name
    policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["ec2:Describe*"],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}
# /view/variables.tf

variable "name" {
    description = "new user name"
    type = string
}

 

[root]

# /main.tf

module "view-user" { //view user 생성
  source  = "./view"
  name = var.name1
}

module "mgmt-user" { //mgmt user 생성
  source  = "./mgmt"
  name = var.name2
}
 
# /variables.tf

variable "name1" { //view user 생성
    description = "new view-user name"
    type = string
}

variable "name2" { //mgmt user 생성
    description = "new mgmt-user name"
    type = string
}

--- 결과

 

 

'네트워크 & 클라우드 > 자동화' 카테고리의 다른 글

Terraform 기초 9.2 - module  (0) 2022.12.05
Terraform 기초 8 - Local  (0) 2022.12.02
Terraform 기초 7 - Output  (0) 2022.12.01
Terraform 기초 6 - Variables  (0) 2022.12.01
Terraform 기초 5 - Data Block  (0) 2022.12.01