IaC 도구 이해: AWS CDK 대 Terraform

AWS CDK 및 Terraform – 무엇을 선택해야 할지 모르십니까? 이 기사는 정보에 입각한 결정을 내리는 데 도움이 될 것입니다.

클라우드 컴퓨팅은 정보와 기술의 세계에 혁명을 일으켰습니다. 애플리케이션을 배포하고 유지 관리하는 방식부터 개발 방식에 이르기까지 모든 것이 클라우드 컴퓨팅의 영향을 많이 받았습니다. 모든 새로운 애플리케이션은 클라우드 네이티브로 개발되고 클라우드 서비스와 호환됩니다.

Cloud Computing은 가용성이 높고 확장 가능하며 효율적인 아키텍처를 개발하는 데 도움이 되며, 이를 통해 클라우드 서비스에 대한 수요가 점점 더 많아집니다. 클라우드 컴퓨팅의 이러한 붐으로 인프라를 코드로 유지 관리해야 할 필요가 있습니다. 콘솔을 통해 클라우드 리소스를 수동으로 유지 관리하는 것은 추적하기가 매우 어려울 수 있는 복잡한 작업일 수 있습니다.

IAC 또는 IAAC라고도 하는 코드로서의 인프라가 이 문제를 해결합니다. IAC를 사용하여 리소스를 코드로 정의하고 이 코드를 사용하여 클라우드 서비스를 프로비저닝할 수 있습니다. 인프라를 코드로 사용하면 여러 개발자가 인프라에서 협업하고 개발자가 변경한 내용을 추적할 수 있습니다.

AWS의 코드로서의 인프라

AWS는 전 세계적으로 가장 크고 가장 널리 사용되는 클라우드 제공업체입니다. 자체 IAC 도구인 AWS CloudFormation 또는 AWS CDK가 있으며 Terraform과 같은 타사 IAC 도구에서 리소스를 프로비저닝할 수도 있습니다. AWS용 IAC 도구를 선택할 때 타사 도구인 Terraform은 AWS 관리 도구인 AWS CloudFormation 및 AWS CDK와 견실한 경쟁자입니다.

이러한 각 도구가 제공하는 선택 사항과 기능이 너무 많기 때문에 올바른 IAC 도구를 선택하는 것이 어려울 수 있습니다. 이 기사에서는 AWS CDK와 Terraform의 차이점에 대해 설명합니다. AWS CDK는 내부적으로 Cloudformation을 사용하므로 Cloudformation 및 Terraform에 대한 자세한 내용은 관련 문서 IAC 도구 이해: CloudFormation 대 ​​Terraform을 참조하십시오.

  Excel에서 피벗 테이블을 사용하여 백분율 변경을 계산하는 방법

테라폼

Terraform은 Hashicorp에서 처음 개발한 오픈 소스 Infrastructure as a Code 도구입니다. AWS 뿐만 아니라 다른 클라우드 공급자도 지원하는 매우 정확하고 성숙한 도구입니다. Terraform은 모든 AWS 서비스를 지원하며 개발 커뮤니티는 AWS가 서비스에 추가하는 모든 새로운 기능을 빠르게 선택합니다. Hashicorp 개발 언어(HCL)로 코드를 작성할 수 있습니다. HCL은 인프라 리소스를 정의하기 위한 JSON과 유사한 언어입니다.

AWS CDK

AWS CDK는 AWS CloudFormation을 둘러싼 래퍼입니다. AWS CDK의 작동을 이해하려면 AWS CloudFormation에 대해 약간 알고 있어야 합니다. AWS CloudFormation은 AWS 인프라를 YML 또는 JSON 형식으로 정의할 수 있는 AWS 관리 도구입니다. JSON과 YML을 읽는 것은 쉽지만 실제 프로그래밍 언어는 아닙니다. 루프 및 기능에 대한 기본 지원이 없으므로 대규모 인프라를 유지 관리하는 것이 점점 더 어려워집니다. 여기에서 AWS CDK가 등장합니다.

AWS CDK는 JAVA 또는 Python과 같은 친숙한 프로그래밍 언어를 사용하여 인프라를 프로비저닝할 수 있도록 하는 AWS CloudFromation의 래퍼입니다. 이렇게 하면 코드를 더 쉽게 작성하고 유지 관리할 수 있습니다.

Terraform 대 AWS CDK: 차이점

#1. 언어 및 사용 용이성

언어와 사용 편의성은 AWS CDK와 Terraform의 차이점을 이해하는 데 매우 중요합니다.

먼저 Terraform에 대해 이야기합시다. Terraform은 JSON과 유사한 언어를 사용하여 리소스 및 기타 데이터, HCL 또는 HashiCorp 구성 언어를 정의합니다. 매우 간단하며 설명서는 초보자도 이해하고 따르기 쉽습니다.

S3 버킷을 생성하는 코드를 살펴보겠습니다.

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

코드는 읽기가 매우 간단하며 이 리소스가 지원하는 다른 매개변수는 Terraform 문서.

앞서 언급했듯이 AWS CDK는 프로그래밍 언어로 리소스를 정의할 수 있는 CloudFormation 래퍼입니다. S3 버킷을 생성하는 AWS CDK 코드를 살펴보겠습니다.

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';

export class BucketStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new s3.Bucket(this, 'MyFirstBucket', {
      bucketName: 'my-first-bucket',
    });
 }
}

Terraform 코드는 CDK보다 약간 깔끔해 보이지만 Terraform과 CDK 코드는 모두 매우 간단합니다. 소규모 프로젝트에 IAC를 사용할 계획이라면 Terraform과 CDK 모두 언어와 사용 용이성에 관한 한 훌륭한 옵션입니다.

  첫 트윗을 찾는 방법

그러나 개발자가 많은 대규모 프로젝트에 적합한 IAC 도구를 선택할 때 Terraform에는 단점이 있습니다. Terraform은 간단하지만 새로운 언어이며 사용 중인 다른 프로그래밍 언어와 유사하지 않은 완전히 새로운 언어로 개발자를 교육해야 합니다. 더 중요한 것은 Terraform의 데이터 조작이 다른 프로그래밍 언어만큼 간단하지 않다는 것입니다. 예를 들어, 목록과 객체를 반복하고 값을 변환하는 것은 특히 초보자에게 그렇게 간단하지 않습니다.

개인적으로 사용 편의성을 고려한다면 Terraform보다 AWS CDK를 선호합니다. Terraform을 사용할 때 원하는 결과를 얻기 위해 해결 방법이나 복잡한 스크립트를 사용해야 하는 경우가 있었습니다. 데이터에 대한 제어권과 AWS CDK 언어로 데이터를 쉽게 조작할 수 있는 기능은 AWS CDK의 큰 장점입니다.

#2. 범위

Terraform은 멀티 클라우드 IAC 도구입니다. 즉, Terraform을 AWS뿐 아니라 Azure 또는 GCP와 같은 다른 클라우드 공급자와도 함께 사용할 수 있습니다. Terraform은 다중 클라우드 배포를 생성하고 애플리케이션을 위한 클라우드 공급자를 원하는 수만큼 확보할 수 있는 훌륭한 도구입니다.

Cloud Provider의 서비스 문제로 널리 사용되는 글로벌 플랫폼이 다운되는 경우가 있었습니다. 오늘날에는 애플리케이션에 대해 둘 이상의 클라우드 공급자를 보유하는 것이 현명한 결정입니다.

AWS CDK는 IAC용 AWS 제품입니다. 강력하고 성숙한 CDK는 AWS 클라우드에만 국한됩니다.

IAC 도구의 범위를 고려할 때 Terraform은 두 가지 중 확실한 승자입니다. 개발자가 모든 클라우드 플랫폼에 대해 단일 도구를 사용하도록 하는 것이 좋습니다.

#삼. 성능

성능은 일반적으로 올바른 IAC 도구를 선택할 때 가장 중요한 기준이 아니지만 대규모 프로젝트에서는 중요할 수 있습니다. Terraform은 AWS SDK를 사용하여 리소스를 배포하는 반면 CDK 코드는 먼저 CloudFormation 템플릿으로 변환된 다음 적용됩니다.

Terraform은 특히 CDK가 코드를 CloudFormation 템플릿으로 변환하는 데 걸리는 시간 때문에 AWS CDK보다 약간 더 빠르게 작동합니다.

#4. 모듈성

Terraform과 AWS CDK를 모두 사용하여 모듈을 생성할 수 있습니다. Terraform은 모듈을 기본적으로 지원합니다. 고유한 모듈을 만들고 조직 내에서 사용하기 위해 개인 모듈 레지스트리에서 호스트할 수 있습니다. Terraform에는 또한 공개 모듈을 호스팅하고 사용하기 위한 공개 모듈 레지스트리가 있습니다.

  더 나은 모니터링을 위한 5가지 최고의 Spiceworks 대안

AWS CDK에서 재사용 가능한 함수, 클래스를 생성하고 조직 내에서 이 코드를 공유하여 동일한 결과를 얻을 수 있습니다. 이것은 다른 AWS IAC 도구인 AWS CDK의 큰 장점입니다. CloudFormation에서는 코드를 모듈로 생성하고 재사용할 수 없습니다. CloudFormation에서 중첩 스택을 사용하여 이 요구 사항을 달성할 수 있지만 AWS CDK를 사용하는 것이 훨씬 더 적합한 대안입니다.

대체로 두 도구는 이 측면에서 유사합니다.

#5. 제어 및 거버넌스

궁극적으로 AWS 콘솔에 대한 모든 액세스는 AWS의 Identity Management Service인 IAM에 의해 제어됩니다. AWS CDK 및 Terraform 모두에서 IAM 정책을 사용하여 특정 작업을 허용 및 거부할 수 있습니다. IAM을 사용하면 계정에서 수행할 수 있는 작업을 세부적으로 제어할 수 있습니다.

IAM을 사용하여 계정 리소스에 대한 액세스를 제어하는 ​​것 외에도 Terraform은 정책을 코드 프레임워크인 Sentinel로 제공합니다. Sentinel을 사용하면 Terraform을 통해 사용자의 작업을 올바르게 제어하는 ​​세분화된 정책을 작성할 수 있습니다.

결론

AWS CDK는 내부적으로 CloudFormation을 사용하므로 CloudFormation 대 ​​Terraform 문서를 살펴보고 AWS CDK와 Terraform의 차이점을 더 잘 이해하는 것이 좋습니다.

전반적으로 AWS CDK와 Terraform은 모두 성숙하고 강력한 도구입니다. Terraform은 데이터 조작과 관련하여 약간의 단점이 있습니다. 그러나 내 경험상 Terraform 작성에 익숙해지면 해결 방법을 사용하고 데이터 변환을 수행하는 것이 더 쉬워집니다. 다중 클라우드 작업의 경우 Terraform이 확실한 선택입니다. 그러나 AWS를 클라우드 공급자로 사용하려는 경우 AWS CDK가 훌륭한 대안입니다.