본문 바로가기

클라우드/Terraform

[DevOps] IaC 개념 / Terraform 동작 / AWS CLI - 2일차 완

 

 

**IaC (Infrastructure as Code, 코드형 인프라)**는 인프라를 설정하고 관리하는 방식으로, 전통적인 수동적인 인프라 관리 방법에서 벗어나 코드로 인프라를 정의하고 관리하는 접근법입니다. 즉, 서버, 네트워크, 데이터베이스 등 인프라 자원을 코드로 정의하여 자동화하고 버전 관리할 수 있습니다.

주요 특징

  1. 코드로 인프라 관리:
    • 시스템 인프라의 설정을 코드로 작성하고 이를 버전 관리 시스템(Git 등)을 사용하여 관리합니다.
    • 인프라의 배포, 설정, 업데이트가 코드로 자동화됩니다.
  2. 자동화:
    • 수동으로 서버를 프로비저닝하고, 구성하고, 배포하는 대신, IaC를 통해 코드만 실행하면 자동으로 환경이 설정됩니다.
  3. 일관성 및 재사용성:
    • 코드를 재사용하고 동일한 인프라 구성을 여러 번 반복할 수 있습니다.
    • 코드 기반의 인프라 구성으로 사람에 의한 실수를 줄일 수 있습니다.
  4. 버전 관리:
    • 인프라 구성을 코드로 관리하므로 Git과 같은 버전 관리 시스템을 통해 변경 내역을 추적하고, 롤백 및 협업이 가능합니다.

IaC의 이점

  • 빠른 배포: 코드를 실행하는 것만으로 필요한 인프라를 빠르게 배포할 수 있습니다.
  • 일관성: 여러 환경에서 동일한 인프라를 코드로 정의하면 설정이 일관되게 유지됩니다.
  • 효율성: 반복적인 작업을 자동화하여 인프라 관리의 효율성을 높입니다.
  • 버전 관리와 감사: 인프라의 변경 사항을 코드로 관리하므로 변경 내역을 추적하고, 필요한 경우 쉽게 롤백할 수 있습니다.

IaC 도구 예시

  • Terraform: HashiCorp에서 개발한 오픈 소스 IaC 도구로, 클라우드 서비스 제공업체(AWS, Azure, GCP 등)의 인프라를 코드로 정의할 수 있습니다.
  • Ansible: IT 자동화 도구로, 서버와 애플리케이션 배포, 관리 등을 자동화하는 데 사용됩니다.
  • AWS CloudFormation: AWS 환경에서 인프라를 코드로 정의하고 관리하는 서비스입니다.
  • Chef, Puppet: 서버 관리와 자동화를 위한 도구로, 시스템 구성과 관리 작업을 코드화합니다.

IaC 적용 방식

  1. 선언적(Declarative) 방식: 사용자가 원하는 최종 상태(예: 서버의 설정)를 정의하고, 시스템은 이를 자동으로 만들어갑니다. (예: Terraform)
  2. 명령적(Imperative) 방식: 사용자가 인프라를 설정하기 위한 단계별 작업을 정의합니다. (예: Ansible)

예시 (Terraform 코드)

hcl
코드 복사
provider "aws" { region = "us-west-2" } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" }

위 코드는 AWS에서 EC2 인스턴스를 생성하는 코드로, Terraform을 사용하여 AWS 클라우드에 해당 인스턴스를 자동으로 배포할 수 있습니다.

결론

IaC는 인프라 관리의 효율성을 높이고, 자동화, 일관성, 그리고 빠른 배포를 가능하게 만드는 중요한 방법입니다. 이를 통해 개발팀과 운영팀 간의 협업을 강화하고, 클라우드 환경에서의 관리 작업을 최적화할 수 있습니다.

 

 

환경설정하기

[AWS CLI설치] CMD에서 설치

1.

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

aws --versionCopy

 

2.설치완료

 

[TERRA FORM 설치]
https://www.terraform.io/downloads

 

Install | Terraform | HashiCorp Developer

Explore Terraform product documentation, tutorials, and examples.

developer.hashicorp.com

 

[TERRA FORM VScode EXTION 설치]

provider "aws"{
    region = "ap-northeast-2"
}Copy

 

 

 

 

terraform initCopy

 

terraform init 명령은 Terraform 프로젝트 디렉터리를 초기화하는 명령으로, Terraform 설정 파일이 포함된 디렉터리에서 실행됩니다. 이 명령은 프로젝트를 실행할 준비를 하기 위해 여러 작업을 수행합니다.

주요 기능:

  1. 백엔드 초기화
    • Terraform 상태 파일을 관리할 원격 또는 로컬 백엔드를 초기화합니다.
    • 예: S3를 백엔드로 설정한 경우, Terraform이 S3와 연결을 설정합니다.
  2. 프로바이더 플러그인 다운로드
    • Terraform 설정 파일(.tf)에 지정된 클라우드 프로바이더(예: AWS, Azure, GCP 등) 또는 서비스의 플러그인을 다운로드합니다.
    • 기본적으로 .terraform 디렉터리에 저장됩니다.
  3. 모듈 초기화
    • module 블록을 사용하는 경우, 참조된 모듈을 로컬 또는 원격 소스에서 다운로드합니다.
  4. 기타 플러그인 설치
    • 필요한 경우 외부 플러그인 또는 커스텀 플러그인도 설정됩니다.

사용 방법:

  1. Terraform 설정 파일 준비
    • .tf 파일 작성 (예: main.tf).
  2. 명령 실행
  3. bash
    코드 복사
    terraform init
  4. 출력 예시:
  5. bash
    코드 복사
    Initializing the backend... Initializing provider plugins... - Finding hashicorp/aws versions matching ">= 3.0.0"... - Installing hashicorp/aws v5.0.0... - Installed hashicorp/aws v5.0.0 (signed by HashiCorp) Terraform has been successfully initialized!

주의 사항:

  • 백엔드 변경: 백엔드가 변경되었거나, 플러그인 버전이 변경된 경우에는 반드시 다시 실행해야 합니다.
  • 동일 디렉터리에서 실행: 설정 파일과 같은 디렉터리에서 실행해야 합니다.

궁금한 점이나 추가적인 설정에 대해 도움이 필요하면 알려주세요

 

 

[S3 버킷만들기]

 

 

terraform plan은 Terraform이 실제 인프라에 어떤 변화를 적용할지 미리 확인할 수 있는 유용한 명령입니다. 이 명령을 통해 예상되는 결과를 검토하고, 실수로 인한 변경을 방지할 수 있습니다.

PS C:\iac\test1> terraform.exe plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with   
the following symbols:
  + create

Terraform will perform the following actions:

  # aws_s3_bucket.jarrddms33 will be created
  + resource "aws_s3_bucket" "jarrddms33" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "jarrddms33"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags_all                    = (known after apply)
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.Copy

 

 

 

erraform apply는 Terraform 계획(plan)을 실제 인프라에 적용하는 명령입니다. terraform apply는 terraform plan 명령을 통해 미리 본 변경 사항을 실행하여, 코드에서 정의한 리소스를 생성, 수정 또는 삭제합니다. 이 명령은 실제 인프라 환경에 영향을 미치므로 주의 깊게 사용해야 합니다.

PS C:\iac\test1> terraform.exe apply 

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_s3_bucket.jarrddms33 will be created
  + resource "aws_s3_bucket" "jarrddms33" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "jarrddms33"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags_all                    = (known after apply)
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

Apply cancelledCopy

 

올바르게 업로드 된 모습 jarrddms33

 

 

 

중간에 'yes'를 직접 입력해야한다.Copy

 

 

s3 버킷에 이미지 업로드 후 다운로드 받기 

C:\Windows\System32>aws s3 ls
2024-11-21 16:14:22 jarrddms33

C:\Windows\System32>aws s3 ls s3://jarrddms33
2024-11-21 16:27:03       7279 jarry.png

C:\Windows\System32>aws s3 cp s3://jarrddms33/jarry.png .
download: s3://jarrddms33/jarry.png to .\jarry.pngCopy

 

 
 
반응형