DevOps/Terraform
[TF]Terraform 반복문
Michael Kim
2021. 12. 22. 01:06
Terraform에서도 반복문은 for문을 사용한다.
IAM Group과 IAM User를 생성하여 IAM User를 IAM Group에 할당시켜보자
main.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_iam_group" "developer" {
name = "developer"
}
resource "aws_iam_group" "employee" {
name = "employee"
}
output "groups" {
value = [
aws_iam_group.developer,
aws_iam_group.employee,
]
}
variable "users" {
type = list(any)
}
resource "aws_iam_user" "this" {
for_each = {
for user in var.users :
user.name => user
}
name = each.key
tags = {
level = each.value.level
role = each.value.role
}
}
resource "aws_iam_user_group_membership" "this" {
for_each = {
for user in var.users :
user.name => user
}
user = each.key
groups = each.value.is_developer ? [aws_iam_group.developer.name, aws_iam_group.employee.name] : [aws_iam_group.employee.name]
}
terraform.tfvars
users = [
{
name = "john"
level = 7
role = "재무"
is_developer = false
},
{
name = "alice"
level = 1
role = "인턴 개발자"
is_developer = true
},
{
name = "tony"
level = 4
role = "데브옵스"
is_developer = true
},
{
name = "cindy"
level = 9
role = "경영"
is_developer = false
},
{
name = "hoon"
level = 3
role = "마케팅"
is_developer = false
},
]
main.tf 작성하고 terraform.tfvars를 같은 경로에 추가하였다.
terraform.tfvars에서는 IAM User Tag로 name, level, role, developer여부를 선언해주었다.
terraform apply를 시키고 AWS Console에서 확인해보면 alice, tony는 developer, employee Group에 속하고 나머지 cindy, hoon, jhon은 employee Group에 속하게된다.
여기서 추가로 정책을 부여하기 위해서 for문과 if문을 사용하여 부여할 수 있다.
locals {
developers = [
for user in var.users :
user
if user.is_developer
]
}
resource "aws_iam_user_policy_attachment" "developer" {
for_each = {
for user in local.developers :
user.name => user
}
user = each.key
policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess"
depends_on = [
aws_iam_user.this
]
}
developers를 지역변수 선언하고 for문에서 실행되고 developer라면 user에게 정책arn을 통해 정책을 부여할 수 있다.
depends_on은 docker에서와 같이 의존하다 라는 의미이다.
아무튼 실행을 하게되면 developer의 IAM Group에 속한 user들은 정책을 부여 받는다.