modules 폴더 내에 아래와 같이 iam 모듈이 있다.

.
...
└── iam
    ├── main.tf
    └── outputs.tf

main.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" {
  ...
}

outputs.tf

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
}