modules 폴더 내에 아래와 같이 iam 모듈이 있다.
.
...
└── iam
├── main.tf
└── outputs.tf
총 3가지 resource가 있다. 이 resource들은 hashicorp/aws 에서 제공하는 provider에서 사용한 것으로 각 resource들을 설치했을 때 어떤 output들을 사용할 수 있는지는 공식 Provider 홈페이지를 참고해야 한다.
resource "aws_iam_role" "terraform_iam_role" {
...
resource "aws_iam_role_policy_attachment" "terraform_AmazonEKSClusterPolicy" {
...
}
resource "aws_iam_role_policy_attachment" "terraform_AmazonEKSVPCResourceController" {
...
}
aws_iam_role.terraform_iam_role.arn → 이 value를 살펴보자. <provider resource name>/<custom resource name>/<output name> 으로 구성된것을 볼 수 있다.
output "aws_iam_role" {
value = aws_iam_role.terraform_iam_role**.arn**
}
output "aws_iam_policy_role" {
value = aws_iam_role_policy_attachment.terraform_AmazonEKSClusterPolicy**.role**
}
output "aws_iam_vpc_resource_controller_role" {
value = aws_iam_role_policy_attachment.terraform_AmazonEKSVPCResourceController**.role**
}
module은 각각 Terraform 공식 문서에 설명한 바와 같이 보통 아래와 같은 구조인데,
.
├── LICENSE
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf
이러한 module들의 상위 폴더는 여러 module들을 포함할 수 있을 것이다.
.
...
└── modules
├── module_1
├── ...
└── module_N
재사용 가능한 모듈을 사용하는 방법은 아래와 같다.
module "aws_iam" {
source = "../../modules/iam" # module 파일 경로
# 기타 module 내에서 사용하기 위한 변수들.
name = var.iam_name
}