CDKTF(Python 사용)를 사용해 봅시다

왜 CDKTF인가?



TypeScript, JavaScript, Python, Java 또는 C#과 같이 개발자가 이미 알고 있는 일반적인 프로그래밍 언어로 인프라를 구축할 수 있는 AWS CDK 위에 있는 추상화 계층인 CloudFormation 에 대해 들은 것은 몇 년 전입니다.

CDKTF은 Hashicorp의 답변으로 동일한 개념을 제공하지만 약간의 차이점이 있습니다.
  • Terraform으로 실행됩니다!
  • 언어가 정확히 동일하지 않음: TypeScript, Python, Java, C# 및 Go
  • 궁극적으로 설명서에 나와 있는 것처럼 Terraform Registry에서 사용 가능한 모든 Terraform 공급자 및 모듈을 사용할 수 있습니다!

  • 그리고 왜 파이썬?



    가장 적합한 언어는 TypeScript인 것 같습니다. 더 많은 가능성을 제공하고 설치가 덜 필요합니다.
    하지만 저는 파이썬이 더 편하고 그것이 어떻게 통합되는지 보는 것이 흥미롭습니다.
    또한 이 언어는 CDK와 CDKTF 모두에서 사용할 수 있으므로 두 문서 모두에서 이점을 얻을 수 있습니다.

    설치



    이 예에서는 다음 도구를 설정해야 합니다.
  • Aws-cli가 구성된 AWS 계정
  • 무료Terraform Cloud 계정이 있는 Terraform
  • NodeJS/NPM
  • 파이썬/Pipenv

  • npm install --global cdktf-cli@latest
    
    # to see the available commands
    cdktf help
    

    용법



    먼저 로컬에서 프로젝트를 초기화합니다.

    cdktf init --template="python"
    # Then, there is a prompt, I specify "cdktf_example" 
    # for the name of my workspace
    


    그런 다음 API Reference에 따라 간단한 S3 버킷을 생성합니다.

    #!/usr/bin/env python
    
    BUCKET_NAME = "<< THE UNIQUE NAME FOR MY S3 BUCKET >>"
    TFCLOUD_ORGA = "<< THE NAME OF MY ORGANIZATION >>"
    
    from constructs import Construct
    from cdktf import App, NamedRemoteWorkspace, TerraformStack, TerraformOutput, RemoteBackend
    from cdktf_cdktf_provider_aws import AwsProvider, s3
    
    
    class MyStack(TerraformStack):
        def __init__(self, scope: Construct, ns: str):
            super().__init__(scope, ns)
    
            AwsProvider(self, "AWS", region="eu-west-1")
    
            bucket = s3.S3Bucket(self, "cdktf-example",
                                 bucket=BUCKET_NAME)
    
            TerraformOutput(self, "s3_arn",
                            value=bucket.arn,
                            )
    
    
    app = App()
    stack = MyStack(app, "cdktf_example")
    RemoteBackend(stack,
                  hostname='app.terraform.io',
                  organization=TFCLOUD_ORGA,
                  workspaces=NamedRemoteWorkspace('cdktf_example')
                  )
    
    app.synth()
    


    마지막으로 다음 명령을 사용하여 인프라를 조작할 수 있습니다.

    # to install dependencies
    pipenv install cdktf-cdktf-provider-aws
    cdktf get
    
    cdktf diff
    # which is the same than `terraform plan`
    
    cdktf deploy
    # which is the same than `terraform apply`
    
    cdktf destroy
    # which is the same than `terraform destroy`
    


    코드를 사용할 수 있습니다here.

    내 피드백



    저처럼 공동 작업을 위해 S3 버킷에 tfstates를 저장하는 데 익숙하다면 사용 가능한 DataTerraformRemoteStateS3 객체를 찾았으므로 원하는 경우 Terraform Cloud를 사용하지 않아도 됩니다.

    이 기사를 작성할 당시에는 S3 버킷을 인스턴스화하기 위한 올바른 구문과 같은 간단한 정보를 찾기 위해 흑마술을 사용해야 했지만(특히 구문이 CDK와 CDKTF 간에 약간 다르기 때문에) 곧 개선될 것이라고 추측할 수 있습니다. .

    정말 좋은 점은 실제로 꽤 잘 작동하고 구조화, 단위 테스트 등과 같은 Python 및 모든 이점을 사용하여 인프라 코드를 작성할 수 있다는 것입니다.

    CDK에 비해 CDKTF의 또 다른 큰 장점은 모든 Terraform 공급자와 함께 작동할 수 있으므로 더 이상 AWS에 국한되지 않는다는 것입니다.

    CDKTF를 사용하면 좋아하는 언어로 인프라 코드를 직접 작성할 수 있으므로 부담 없이 사용해 보세요!

    좋은 웹페이지 즐겨찾기