terraform을 작성하는 방법, 하지만 typescript 사용

TypeScript를 사용하여 인프라를 작성할 수 있기를 바란 적이 있습니까? terraform cdk(클라우드 개발 키트의 줄임말) 출시에 대해 들어보셨을 수도 있고 듣지 못했을 수도 있습니다. aws cdk에 대한 HashiCorps 답변입니다. 프로젝트 readme에 따르면:

CDK (Cloud Development Kit) for Terraform allows developers to use familiar programming languages to define cloud infrastructure and provision it through HashiCorp Terraform.



이것을 시도해 볼까요?

완전한 개발자 경험을 얻으려면 다음이 있는지 확인하십시오typescript support installed for your IDE.



상용구 생성



터미널을 열고 install cdktf-cli를 설치해 보겠습니다.

npm install -g cdktf-cli


다음으로 프로젝트를 초기화합니다.

mkdir hello-cdktf
cd hello-cdktf
cdktf init --template="typescript" --local


두 가지 구성 질문에 답하면 프로젝트 상용구가 생성됩니다.

이제 폴더에 다음 내용이 포함된 main.ts 파일이 표시됩니다.

import { Construct } from 'constructs';
import { App, TerraformStack } from 'cdktf';

class MyStack extends TerraformStack {
  constructor(scope: Construct, name: string) {
    super(scope, name);

    // define resources here

  }
}

const app = new App();
new MyStack(app, 'hello-cdktf2');
app.synth();


공급자 패키지 추가 및 여기에서 모듈 가져오기



생성이 완료되면 다음에 수행할 작업에 대한 지침을 나열하는 콘솔에 메시지가 표시됩니다. 미리 빌드된 aws 공급자를 추가합니다(원할 수 있는 모든 모듈과 유형도 제공).

npm install -a @cdktf/provider-aws


이제 @cdktf/provider-aws 및 기타와 같은 AwsProvider에서 모듈을 가져올 수 있습니다. 우리는 AwsProvider , LambdaFunctionIamRole 로 갈 것입니다. 파일 맨 위에 다음을 추가하십시오.

import { AwsProvider, LambdaFunction, IamRole } from '@cdktf/provider-aws';


그런 다음 스택에 AwsProvider를 생성합니다.

new AwsProvider(this, 'aws', {
  region: 'eu-west-2'
})


스택에 람다 함수 추가



람다를 생성하려면 먼저 IAM 역할을 정의해야 합니다. 지루하지만 코스 자동 완성으로 더 쉬워졌습니다. 어쨌든 기본 정책은 다음과 같습니다.

const roleForLambda = new IamRole(this, 'iam-role-for-lambda', {
  name: 'iam-role-for-lambda',
  assumeRolePolicy: JSON.stringify({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "sts:AssumeRole",
        "Principal": {
          "Service": "lambda.amazonaws.com"
        },
        "Effect": "Allow"
      }
    ]
  })
})


이제 다음과 같이 스택에 람다 함수를 추가할 수 있습니다.

new LambdaFunction(this, 'hello-world', {
  filename: process.cwd() + 'hello-world.zip'
  functionName: 'hello-world',
  handler: 'index.handler',
  runtime: 'nodejs12.x',
  role: roleForLambda.arn,
})


일반적으로 terraform을 실행하기 전에 별도의 단계인 람다 함수를 압축해야 합니다. 예를 들어 프로젝트에 hello-world.js라는 파일이 있다고 가정해 보겠습니다.

export const handler = async function () {
  return { hello: world }
}


그런 다음 람다를 압축합니다zip -r lambda.zip hello-world.js.

스택 배포



배포하기 전에 잊지 마세요have your aws credentials in your path.

이제 모든 준비가 완료되었으므로 cdktf deploy를 사용하여 스택을 배포할 수 있습니다. 이 명령은 실행 계획을 표시하고 배포할 것인지 묻습니다. YEnter 키를 눌러 배포합니다.

이 단계의 모든 오류는 자명해야 합니다. 이해가 되지 않으면 오류 메시지를 Google에 검색하세요. 다른 사람들도 같은 문제에 부딪혔을 가능성이 큽니다.


terraform 사용자이고 이전에 lambda_function 모듈을 사용한 적이 있다면 구성이 정확히 동일하다는 것을 알 수 있습니다.

궁극적으로 cdktf synth cdktf를 실행하면 javascript/typescript 모듈이 terraforms alternative JSON configuration syntax로 컴파일됩니다.

이는 javascript 및 typescript뿐만 아니라 모든 종류의 언어에 대한 컴파일 대상이 될 수 있기 때문에 terraform 디자인의 매우 강력한 기능입니다. 오픈 소스 커뮤니티는 자체 언어 컴파일러를 추가할 수 있습니다.

녹슬지 않는 이유는 무엇입니까? 😅

추신: 이 게시물의 원래 버전은 my website에 게시되었습니다. 이 게시물이 마음에 드셨다면 둘러보세요.

좋은 웹페이지 즐겨찾기