**IaC (Infrastructure as Code, 코드형 인프라)**는 인프라를 설정하고 관리하는 방식으로, 전통적인 수동적인 인프라 관리 방법에서 벗어나 코드로 인프라를 정의하고 관리하는 접근법입니다. 즉, 서버, 네트워크, 데이터베이스 등 인프라 자원을 코드로 정의하여 자동화하고 버전 관리할 수 있습니다.
주요 특징
- 코드로 인프라 관리:
- 시스템 인프라의 설정을 코드로 작성하고 이를 버전 관리 시스템(Git 등)을 사용하여 관리합니다.
- 인프라의 배포, 설정, 업데이트가 코드로 자동화됩니다.
- 자동화:
- 수동으로 서버를 프로비저닝하고, 구성하고, 배포하는 대신, IaC를 통해 코드만 실행하면 자동으로 환경이 설정됩니다.
- 일관성 및 재사용성:
- 코드를 재사용하고 동일한 인프라 구성을 여러 번 반복할 수 있습니다.
- 코드 기반의 인프라 구성으로 사람에 의한 실수를 줄일 수 있습니다.
- 버전 관리:
- 인프라 구성을 코드로 관리하므로 Git과 같은 버전 관리 시스템을 통해 변경 내역을 추적하고, 롤백 및 협업이 가능합니다.
IaC의 이점
- 빠른 배포: 코드를 실행하는 것만으로 필요한 인프라를 빠르게 배포할 수 있습니다.
- 일관성: 여러 환경에서 동일한 인프라를 코드로 정의하면 설정이 일관되게 유지됩니다.
- 효율성: 반복적인 작업을 자동화하여 인프라 관리의 효율성을 높입니다.
- 버전 관리와 감사: 인프라의 변경 사항을 코드로 관리하므로 변경 내역을 추적하고, 필요한 경우 쉽게 롤백할 수 있습니다.
IaC 도구 예시
- Terraform: HashiCorp에서 개발한 오픈 소스 IaC 도구로, 클라우드 서비스 제공업체(AWS, Azure, GCP 등)의 인프라를 코드로 정의할 수 있습니다.
- Ansible: IT 자동화 도구로, 서버와 애플리케이션 배포, 관리 등을 자동화하는 데 사용됩니다.
- AWS CloudFormation: AWS 환경에서 인프라를 코드로 정의하고 관리하는 서비스입니다.
- Chef, Puppet: 서버 관리와 자동화를 위한 도구로, 시스템 구성과 관리 작업을 코드화합니다.
IaC 적용 방식
- 선언적(Declarative) 방식: 사용자가 원하는 최종 상태(예: 서버의 설정)를 정의하고, 시스템은 이를 자동으로 만들어갑니다. (예: Terraform)
- 명령적(Imperative) 방식: 사용자가 인프라를 설정하기 위한 단계별 작업을 정의합니다. (예: Ansible)
예시 (Terraform 코드)
위 코드는 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
[TERRA FORM VScode EXTION 설치]
provider "aws"{
region = "ap-northeast-2"
}Copy
terraform initCopy
terraform init 명령은 Terraform 프로젝트 디렉터리를 초기화하는 명령으로, Terraform 설정 파일이 포함된 디렉터리에서 실행됩니다. 이 명령은 프로젝트를 실행할 준비를 하기 위해 여러 작업을 수행합니다.
주요 기능:
- 백엔드 초기화
- Terraform 상태 파일을 관리할 원격 또는 로컬 백엔드를 초기화합니다.
- 예: S3를 백엔드로 설정한 경우, Terraform이 S3와 연결을 설정합니다.
- 프로바이더 플러그인 다운로드
- Terraform 설정 파일(.tf)에 지정된 클라우드 프로바이더(예: AWS, Azure, GCP 등) 또는 서비스의 플러그인을 다운로드합니다.
- 기본적으로 .terraform 디렉터리에 저장됩니다.
- 모듈 초기화
- module 블록을 사용하는 경우, 참조된 모듈을 로컬 또는 원격 소스에서 다운로드합니다.
- 기타 플러그인 설치
- 필요한 경우 외부 플러그인 또는 커스텀 플러그인도 설정됩니다.
사용 방법:
- Terraform 설정 파일 준비
- .tf 파일 작성 (예: main.tf).
- 명령 실행
-
bash코드 복사terraform init
- 출력 예시:
-
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
'클라우드 > Terraform' 카테고리의 다른 글
[테라폼] 실습 환경 구성 - 1일차(EC2설치) (0) | 2024.11.21 |
---|---|
[DevOps] 앤썸 & 테라폼 & 리눅스의 개념 (0) | 2024.11.19 |