티스토리 뷰

사실 AWS 리소스를 HCL로 정의하는 것 보다 선행되어야 하는 것들이 있다.

 

Provider 설정과 AWS 인증에 관한 내용이었는데, 그 전까지는 별다른 설정없이도 잘 동작해서 필요했는지 잘 몰랐다.

 

Provider부터 하나씩 알아보자.


Terraform provider는 Terraform이 특정 기술 스택이나 API와 통신할 수 있게 해주는 플러그인이다.

https://registry.terraform.io/browse/providers

Provider의 종류가 많다.

 

AWS용 Terraform provider는 AWS API와 통신하여 AWS 리소스를 생성, 관리 및 삭제할 수 있게 해준다.

Provider는 Terraform이 관리할 수 있는 resource type과 data sources를 추가해서, Provider가 구현해놓은 모든 리소스들을 사용한다.

대부분의 Provider는 특정 인프라 플랫폼(클라우드 또는 자체 호스팅)을 구성한다. Provider는 고유한 리소스 이름에 대한 난수 생성과 같은 작업을 위해 로컬 유틸리티를 제공하기도 한다.

 

2024년 4월 25일 현재 최신 aws 프로바이더 버전은 5.46이다.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.46.0"
    }
  }
}
# Configure the AWS Provider
provider "aws" {
  region  = "ap-northeast-2"
  profile = terraform.workspace
  # Make it faster by skipping something
  skip_metadata_api_check     = true
  skip_region_validation      = true
  skip_credentials_validation = true
  default_tags {
    tags = {
      Team  = "Metashare-testbed"
      Stage = terraform.workspace
    }
  }
}
data "aws_region" "current" {}
data "aws_caller_identity" "current" {}


resource를 추가하고 provider가 제공되지 않는다면 아래와 같은 오류가 발생한다

Error: No provider found for "resource 이름" resource.

정상적으로 provider를 지정해주고 terraform init을 실행하면, 아래와 같은 문구가 나오면서 정상 실행된다.

$ terraform init
Initializing provider plugins...
Reusing previous version of hashicorp/aws from the dependency lock fileUsing previously-installed hashicorp/aws v5.46.0
Terraform has been successfully initialized!

 

AWS 인증

Terraform Provider는 AWS 인증을 위해 다양한 방법을 제공한다.

 

  1. Provider 구성의 매개변수
  2. 환경 변수
  3. 공유 자격 증명 파일
  4. 공유 구성 파일
  5. 컨테이너 자격 증명
  6. 인스턴스 프로필 자격 증명 및 리전

가장 쉬운 방법인 1번은 아래와 같이 구성할 수 있다.

provider "aws" {
  region     = "ap-northeast-2"
  access_key = "my-access-key"
  secret_key = "my-secret-key"
}

provider에서 제공하는 가장 기본적인 AWS 인증 방식이지만, Terraform에서도 권장하지 않는다.

 

하드코딩된 credential은 권장하지 않음

 

어떻게 사용할까 하다가 현재 사용하고 있는 AWS 인증 방식과 크게 다르지 않은 3번 공유 자격 증명 파일을 사용하도록 했다.

 

linux 기준 : $HOME/.aws/config windows 기준 : "%USERPROFILE%\.aws\config" 에 저장된 파일을 기준으로 인증 정보를 받아온다.

[verify]
aws_access_key_id = ....
aws_secret_access_key = ....
region = ap-northeast-2
[prod]
aws_access_key_id = ....
aws_secret_access_key = ....
[test]
aws_access_key_id = ....
aws_secret_access_key = ....
region = ap-northeast-2

 

verify, prod, test profile과 같이 credential에 named profile을 명시해주면, 그 profile의 인증을 따라간다.

 

terraform에서 workspace를 지정해서도 사용할 수 있는데 아래와 같이 지정한다.

terraform workspace select 'profile'

# profile = terraform.workspace < proflie에 저장되는 위치

# workspace가 없을 때
terraform workspace new 'profile'
# workspace가 리스트 확인
terraform workspace list
terraform workspace select 'profile'

 

위의 예시에서 작성한대로 workspace.profile로 지정하면, 에 지정된 profile을 따라간다.

 

나머지 방식들은 공식 문서에서 제공하는 방식을 참고하면 됩니다.

 

https://registry.terraform.io/providers/hashicorp/aws/latest/docs

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함