티스토리 뷰

AWS 공급자

Amazon Web Services (AWS) 공급자는 AWS에서 지원하는 많은 리소스와 상호 작용하는 데 사용됩니다. 공급자를 사용하려면 먼저 적절한 자격 증명으로 구성해야합니다.

테라폼기초단계

  • 1단계 - 먼저 아마존 웹 서비스 계정을 준비하고, API 키를 설정합니다.
  • 2단계 스텝 1 - 인프라스트럭처를 정의하는 HCL 언어로 필요한 리소스를 선언합니다.
  • 2단계 스텝 2 - 선언된 리소스들이 생성가능한지 계획(Plan)을 확인합니다.
  • 2단계 스텝 3 - 선언된 리소스들을 아마존 웹 서비스에 적용(Apply)합니다.
  • 3단계 - 웹 애플리케이션을 배포합니다.

 

테라폼의 기본 개념들

 

A. 프로비저닝Provisioning :

 

  1) 어떤 프로세스나 서비스를 실행하기 위한 준비 단계를 프로비저닝 이라 한다.

 

  2) 네트워크나 컴퓨팅 자원을 준비하는 작업과 준비된 컴퓨팅 자원준비하는 단계

 

 

B. 프로바이더Provider :

   1) 테라폼과 외부 서비스를 연결해주는 기능을 하는 모듈

       예) 테라폼으로 AWS 서비스의 컴퓨팅 자원을 생성하기 위해서는 aws 프로바이더를 먼저 셋업해야합니다.

 

   2) 프로바이더로는 AWS, 구글 클라우드 플랫폼Google Cloud Platform, 마이크로소프트 애저Microsoft Azure와 같은

      범용 클라우드 서비스를 비롯해 깃허브Github, 데이터도그Datadog, DNSimple과 같은 특정 기능을 제공

 

   3) 하는 서비스, MySQL, 레빗MQRabbitMQ, 도커Docker와 같은 로컬 서비스 등을 지원합니다.

      전체 목록은 테라폼 프로바이더 문서에서 찾아볼 수 있습니다.

 

 

C. 리소스(자원)Resource :

    1) 리소스란 특정 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위입니다.

       예) AWS 프로바이더는 aws_instance 리소스 타입을 제공

 

    2) 리소스 타입을 사용해 Amazon EC2의 가상 머신 리소스를 선언하고 조작하는 것이 가능

 

    3) EC2 인스턴스, 시큐리티 그룹, 키 페어 모두 aws 프로바이더가 제공해주는 리소스 타입입니다.

 

D. HCL : Hashicorp Configuration Language :

   테라폼에서 사용하는 설정 언어입니다. 테라폼에서 모든 설정과 리소스 선언은 HCL을 사용해 이루어집니다.

   테라폼에서 HCL 파일의 확장자는 .tf를 사용합니다.

 

 

E. 계획Plan :

    1) 테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업을 계획

 

    2) 테라폼은 이를 terraform plan 명령어로 제공하며, 이 명령어를 실행하면 어떤 리소스가 생성되고, 수정되고, 삭제

 

F. 적용Apply :

    1) 테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용대로 리소스를 생성, 수정, 삭제

 

    2) 테라폼은 이를 terraform apply 명령어로 제공합니다. 이 명령어를 실행하기 전에 변경 예정 사항은 plan 명령어

 

1. 사용 예(0.12 버전)

Terraform 0.13 이상 :

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  region = "us-east-1"
}

# Create a VPC
resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"
}

2. 사용 예(0.12 버전)

Terraform 0.12 이하 :

# Configure the AWS Provider
provider "aws" {
  version = "~> 3.0"
  region  = "us-east-1"
}

# Create a VPC
resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"
}

 

3. AWS 공급자 블록에 access_key및 secret_key 추가 정적 자격 증명제공.

용법:

 

provider "aws" {
  region     = "us-west-2"
  access_key = "my-access-key"
  secret_key = "my-secret-key"
}

4. 환경 변수

1) AWS 액세스 키와 AWS 보안 키를 각각 나타내는 AWS_ACCESS_KEY_ID및 AWS_SECRET_ACCESS_KEY환경 변수

 

2) AWS_SHARED_CREDENTIALS_FILE및 AWS_PROFILE. AWS_DEFAULT_REGION및 AWS_SESSION_TOKEN환경 변수

 

provider "aws" {}

용법:

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_DEFAULT_REGION="us-west-2"
$ terraform plan

 

5. 공유 자격 증명 파일

1)  AWS 자격 증명 또는 구성 파일을 사용자의 자격 증명을 지정

 

2)기본 위치는 $HOME/.aws/credentialsLinux 및 macOS 또는 "%USERPROFILE%\.aws\credentials"Windows

 

3) shared_credentials_file인수 를 제공 하거나 AWS_SHARED_CREDENTIALS_FILE환경 변수를 사용하여 Terraform 구성에서 선택적으로 다른 위치를 지정

 

4)  profile구성 및 일치하는 AWS_PROFILE환경 변수 도 지원 합니다.

 

용법:

provider "aws" {
  region                  = "us-west-2"
  shared_credentials_file = "/Users/tf_user/.aws/creds"
  profile                 = "customprofile"
}

6. EC2 인스턴스 메타 데이터 서비스

1) IAM 역할을 사용하는 IAM 인스턴스 프로필이있는 EC2 인스턴스에서 Terraform을 실행하는 경우

 

2) Terraform은 메타 데이터 API 엔드 포인트에 자격 증명을 요청

 

3) 하드 코딩 자격 증명을 피할 수 있으므로 EC2에서 실행할 때 다른 접근 방식보다 선호되는 접근 방식

 

4)  Terraform에서 즉시 임대하여 누출 가능성을 줄입니다.

 

5) AWS_METADATA_URL버전을 포함하여 엔드 포인트 URL이 필요한 변수를 통해 사용자 지정 메타 데이터 API 엔드 포인트를 제공 할 수 있으며 기본값은 http://169.254.169.254:80/latest.

역할 수임

역할 ARN이 제공되는 경우 Terraform은 제공된 자격 증명을 사용하여이 역할을 수임하려고합니다.

용법:

provider "aws" {
  assume_role {
    role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
    session_name = "SESSION_NAME"
    external_id  = "EXTERNAL_ID"
  }
}

 

7. 인수 참조

일반 provider인수 (예 : alias및 version) 외에도 다음 인수가 AWS provider블록 에서 지원됩니다 .

  • access_key-(선택 사항) AWS_ACCESS_KEY_ID환경 변수에서 제공되거나 profile지정된 경우

  • secret_key-(선택 사항) profile지정된 경우 공유 자격 증명 파일을 통해 제공 될 수도 있습니다 .

  • region-(선택 사항) profile지정된 경우 공유 자격 증명 파일을 통해 제공 될 수도 있습니다 .

  • profile -(선택 사항) 공유 자격 증명 파일에 설정된 AWS 프로필 이름입니다.

  • assume_role-(선택 사항)assume_role블록 (아래에 문서화 됨). assume_role구성에는 하나의 블록

  • endpoints-(선택 사항) AWS 엔드 포인트 또는 AWS 호환 솔루션에 연결

  • shared_credentials_file= (선택 사항) 공유 자격 증명 파일의 경로입니다.  ~/.aws/credentials사용

  • token-(선택 사항) 임시 자격 증명을 확인하기위한 세션 토큰. 일반적으로 성공적인 ID 페더레이션 또는 MFA (Multi-Factor Authentication) 로그인 후에 제공됩니다. MFA 로그인을 사용하면 임시 자격 증명을 얻는 데 사용되는 6 자리 MFA 코드가 아니라 나중에 제공되는 세션 토큰입니다. AWS_SESSION_TOKEN환경 변수 에서 가져올 수도 있습니다 .

  • max_retries-(선택 사항) 요청이 제한되거나 일시적인 오류가 발생한 경우 API 호출이 재 시도되는 최대 횟수. 후속 API 호출 사이의 지연은 기하 급수적으로 증가합니다. 기본값은 25

  • allowed_account_ids-(선택 사항) 잘못된 AWS 계정 ID를 실수로 사용하여 잠재적으로 라이브 환경을 파괴하는 것을 방지하기 위해 허용 된 AWS 계정 ID 목록. 충돌 forbidden_account_ids.

  • forbidden_account_ids-(선택 사항) 잘못된 AWS 계정 ID를 실수로 사용하여 잠재적으로 라이브 환경을 파괴하는 것을 방지하기위한 금지 된 AWS 계정 ID 목록. 와 충돌합니다 allowed_account_ids.

  • ignore_tags-(선택 사항) aws_ec2_tag외부 시스템이 특정 리소스 태그를 관리하는 상황 에 대해이 공급자가 처리하는 모든 리소스 (예 : 개별 서비스 태그 리소스 제외)에서 무시할 리소스 태그 설정이있는 구성 블록입니다 . 구성 블록에 대한 인수는 아래 ignore_tags구성 블록 섹션 에 설명 Terraform 여러 공급자 인스턴스 문서를 추가로 제공 구성에 대한 자세한 정보

  • insecure-(선택 사항) 공급자가 "안전하지 않은"SSL 요청을 수행하도록 명시 적으로 허용합니다. 생략하면 기본값은 false입니다.

  • skip_credentials_validation-(선택 사항) STS API를 통해 자격 증명 유효성 검사를 건너 뜁니다. STS를 사용할 수 없거나 구현되지 않은 AWS API 구현에 유용합니다.

  • skip_get_ec2_platforms-(선택 사항) 지원되는 EC2 플랫폼 가져 오기를 건너 뜁니다. ec2 : DescribeAccountAttributes 권한이없는 사용자가 사용합니다.

  • skip_region_validation-(선택 사항) 제공된 지역 이름의 유효성 검사를 건너 뜁니다. 자체 지역 이름을 사용하는 AWS와 유사한 구현에 유용하거나 아직 공개적으로 사용할 수없는 지역에 대한 유효성 검사를 우회하는 데 유용합니다.

  • skip_requesting_account_id-(선택 사항) 계정 ID 요청을 건너 뜁니다. IAM, STS API 또는 메타 데이터 API가없는 AWS API 구현에 유용합니다. 로 설정되고 true이전에 결정되지 않은 경우 다음을 사용하여 ARN 속성을 수동으로 생성 할 때 빈 계정 ID를 반환합니다.


자주 사용하는 자원 모음


 

**********

 

 

 

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

. https://www.44bits.io/ko/post/terraform_introduction_infrastrucute_as_code



 

테라폼(Terraform) 기초 튜토리얼: AWS로 시작하는 Infrastructure as Code

테라폼(Terraform)은 인프라스트럭처를 선언적인 코드로 작성하고 관리할 수 있게 해주는 도구입니다. 이 글에서는 테라폼에 대해 소개하고, 이를 사용해 AWS 리소스를 정의하고 프로비저닝하는 방

www.44bits.io

 

 

 

 

테라폼(Terraform) 기초 튜토리얼: AWS로 시작하는 Infrastructure as Code

테라폼(Terraform)은 인프라스트럭처를 선언적인 코드로 작성하고 관리할 수 있게 해주는 도구입니다. 이 글에서는 테라폼에 대해 소개하고, 이를 사용해 AWS 리소스를 정의하고 프로비저닝하는 방법을 소개합니다.

www.44bits.io

 

2. https://zzsza.github.io/development/2019/03/15/terraform/

 

Terraform 소개 및 정리

코드로 인프라를 관리할 수 있는 테라폼에 대해 정리한 글입니다

zzsza.github.io

 

3. https://www.slideshare.net/awskorea/configuring-practical-aws-based-infrastructure-as-code-using-terraform-byoun-jeonghun

 

Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seo…

Terraform을 이용한 Infrastructure as Code 실전 구성하기

www.slideshare.net

 

4. https://unitedstatesofcodes.tistory.com/8

 

테라폼이 뭐지

테라폼이 뭐지 Terraform. 이름은 몹시 멋지다. 골디락스 존에 있는 행성이나 가까이 있는 화성처럼 지구화 가능할 것 같은 곳을 지구처럼 만드는 걸 테라포밍이라고 하는데 그걸 따온 것은 아닐까 하는 생각을 했..

unitedstatesofcodes.tistory.com

 

댓글