반응형
Intro
테라폼으로 IAM Role을 생성하여 EC2에 할당 할때는 AWS Console에서 작업하는 것과는 다르게 Instance Profile 생성 단계가 필요합니다. 이 Instance Profile이 무엇이고 어떻게 할당 하는지 예제를 통해 알아보도록 하겠습니다.
AWS Console 에서 IAM Role생성
AWS콘솔에서 IAM Role을 생성하면 아래 그림과 같이 자동으로 instance profile이 생성됩니다. 오늘의 주인공이 바로 instance profile 입니다.
그림1.
Instance Profile 이란?
AWS에서는 instance profile을 아래와 같이 정의 하는데요. 간단히 설명하면 “IAM Role을 EC2인스턴스에 할당하기 위해 필요한 자원” 이다 라고 보면 됩니다.
An instance profile is a container for an IAM role that you can use to pass role information to an EC2 instance when the instance starts.
Terraform에서 IAM Role생성
테라폼에서는 아래와 같이 aws_iam_role
을 생성하면, aws console에서 확인 했을때 그림과 같이 instnace profile은 자동으로 생성되지 않습니다.
그림2.
resource "aws_iam_role" "test_role" {
name = "test_role"
# Terraform's "jsonencode" function converts a
# Terraform expression result to valid JSON syntax.
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Sid = ""
Principal = {
Service = "ec2.amazonaws.com"
}
},
]
})
tags = {
tag-key = "tag-value"
}
}
따라서, 아래와 같이 반드시 instance profile을 같이 생성 해주어야 합니다.
resource "aws_iam_instance_profile" "test_profile" {
name = "test_profile"
role = aws_iam_role.test_role.name
}
Terraform으로 EC2에 IAM Role할당 하는 예시
iam_instance_profile
파라미터를 사용하여 위에서 생성한 instance profile을 할당합니다.
module "hpg_ec2_dev_home_webwas_a"{
source = "./modules/ec2"
name = "test-ec2"
instance_count = 1
iam_instance_profile = aws_iam_instance_profile.test_profile.name
ami = data.aws_ami.base_ami.id
instance_type = var.ec2_instnace_type
key_name = data.terraform_remote_state.keypair.outputs.keypair_ec2
monitoring = true
vpc_security_group_ids = [
data.terraform_remote_state.sg.outputs.sg_id
]
subnet_id = data.terraform_remote_state.vpc.outputs.private_subnet_id
associate_public_ip_address = false
enable_volume_tags = true
user_data = filebase64("userdata/userdata.sh")
tags = merge(local.common_tags,
{
Owner = "kimdragon"
Resource = "ec2"
}
)
}
반응형
'IT > Terraform' 카테고리의 다른 글
[Terraform] 테라폼으로 AWS Elasticache(redis) Cluster 모드로 생성하기 (0) | 2022.04.12 |
---|---|
[Terraform] 모듈에 있는 자원을 outputs으로 설정하는 방법 (feat. elb module과 asg) (0) | 2022.03.28 |
[Terraform] 테라폼으로 Lambda함수 생성하기 (feat. cloudwatch event trigger) (0) | 2022.03.09 |
[Terraform] AWS 리소스별로 레이아웃을 나누는 방법 (2) | 2022.03.07 |
[Terraform] 테라폼에서 사용할 코드 케이스 정해보기 (1) | 2022.01.22 |