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을 복사해서 커스텀하여 사용하는 것이 좋다.
- ssh submodule을 선택해보자. 자세한 코드는 Source Code인 github 주소를 클릭해본다.
실습
- 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 |