• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    해결됨

Error: Cannot assume IAM Role 에러 관련 질문 드립니다.

24.04.11 16:10 작성 24.04.11 16:26 수정 조회수 214

1

질문은 부담없이 어떤거든 해주세요!



에러 캡처:




에러 로그:
Planning failed. Terraform encountered an error while generating this plan.

│ Warning: Deprecated Parameters

│ with data.terraform_remote_state.vpc,

│ on remote_state.tf line 1, in data "terraform_remote_state" "vpc":

│ 1: data "terraform_remote_state" "vpc" {

│ The following parameters have been deprecated. Replace them as follows:

│ * role_arn -> assume_role.role_arn

│ (and one more similar warning elsewhere)

│ Error: Cannot assume IAM Role

│ IAM Role ARN not set




상황 설명:

강의 38:27 부분 따라하는 과정에서 plan 명령어 입력 시 첨부드린 사진과 같이 에러가 발생합니다.

참고로,
terraform/services/hello/devartd_apnortheast2를 cp -R로 복사하여,
terraform/services/hello/neopind_apnortheast2 이와 같이 저만의 디렉터리를 만들어 작업 중입니다.

답변 4

·

답변을 작성해보세요.

0

chad님의 프로필

chad

질문자

2024.04.11


주영님, 알려주신 방법은 이미 기존에 적용한 상태에서 plan 명령어를 입력했던거고, 보시는바와 같이 에러가 발생한 상황이라서요..
음.. 뭐가 문제인지 모르겠네요..

inflearn 코드 리뷰를 해드리기가 쉽지 않네요~

service 밑에 remote_state.tf 를 보여주실 수 있을까요~??

chad님의 프로필

chad

질문자

2024.04.11

이렇게 기존에 설정해놓았습니다.

혹시 아직 해결안되셨으면 제가 마침 시간이 되어서 google meet 으로, 같이 해결해보시죠~

주소가 변경되었스빈다ㅠ 나가기 버튼을 눌러서

https://meet.google.com/ozz-shch-yuy

chad님의 프로필

chad

질문자

2024.04.11

감사합니다.
지금 초대 요청 드렸습니다~

Chad님 일단 해당 에러는,

data "terraform_remote_state" "vpc" {

backend = "s3"

config = merge(var.remote_state.vpc.neopindapne2)

}

요렇게 뒤에 merge 할때 assume role을 빼버리면 동작하게 됩니다.

말씀하신대로 해당 변수의 key 형태가 바뀌어서 깨지게 동작하고,

이번 강의에서는 해당 부분을 안쓰기 때문에, 그냥 지워버리면 동작합니다.

하지만 나중에 atlantis 같은 프로그램을 쓰면 assume role 을 동작하게 해야하는데,

이러면 map 에 대한 merge 를 다시 어떻게 해야할지 봐야겠네요~

감사합니다~

 

코드는 해당 부분들을 미리 제거해놓아야겠네요~

chad님의 프로필

chad

질문자

2024.04.11

assume role 부분을 제거하면 되는군요!..
피드백 감사합니다!

덕분에 바뀐 부분을 저도 알게 됐습니다^^

회사에 있는 코드도 곧 통째로 바꿔야겠네요~

말씀하신대로 ChatGPT에서 알려준게 맞는 것 같습니다.

일단 코드는 지운상태로, 나중에 올바르게 merge를 해놔야겠네요~

    assume_role {
      role_arn = "<your-role-ARN>"
      // You can also specify additional fields like session_name, external_id, etc.
    }
## 요게 아니라 아래였는데 remote state 가 변경되어버린거 같네요~
    role_arn = "<your-role-ARN>"
data "terraform_remote_state" "vpc" {
  backend = "s3"
  config = {
    bucket = "<your-bucket-name>"
    key    = "<your-state-file-key>"
    region = "<your-bucket-region>"
    assume_role {
      role_arn = "<your-role-ARN>"
      // You can also specify additional fields like session_name, external_id, etc.
    }
  }
}

0

remote_state 부분에서 참고하는 부분에서 아마 neopidapne2로 바꾸셨을거라 생각합니다.

var_global.tf 있는 파일을 찾으셔서 아래 vpc 정보를 입력해주셔야 할겁니다.

디버깅 성공하시길 기원합니다.!

 

# VPC

vpc = {

devartdapne2 = {

region = "ap-northeast-2"

bucket = "devart-preprod-apnortheast2-tfstate"

key = "devart/terraform/vpc/devartd_apnortheast2/terraform.tfstate"

}

devartsapne2 = {

region = "ap-northeast-2"

bucket = "devart-preprod-apnortheast2-tfstate"

key = "devart/terraform/vpc/devarts_apnortheast2/terraform.tfstate"

}

잘 설정하셨네요,

terraform/services/hello/neopind_apnortheast2/remote_state.tf

파일을 확인해보세요~

0

아마 terraform state 변수를 가지고 오는 부분에 있어서 neopind 이렇게 붙히시면서,

var_global.tf 쪽에 해당 버킷을 가르치는 부분이 없어서 나온 에러인 것 같습니다~

vpc 항목에 있는 devartd -> 새로 설정하신 이름을 추가하고, 만드신 버킷을 backend s3 버킷으로 추가하시면 되겠습니다~

0

chad님의 프로필

chad

질문자

2024.04.11



그리고 추가로
prod = "002202845208" 이 부분은 무엇을 의미하는 부분일까요??
프러덕션 환경의 어카운트라는 의미일까요??

중급강의 2편에서는 IAM을 Multi-account 로 관리하는 방법을 배울 예정입니다.

대부분의 서비스에서 best practice 는 여러가지의 Multi-account, Multi-VPC를 사용하는 것이 best 입니다. 둘다 제가 소유한 account 의 넘버이고, id는 보통 landing-zone 역할을 하는 계정, prod는 production 이라는 의미입니다~

 

해당 코드는 중급뿐 아니라 제가 사용해왔던 다양한 코드들을 모아놓은 것들이라( 지속적으로 변경도 하고 ) 미리 설정되어있다고 보시면 됩니다.