오늘날 많은 팀이 인프라를 코드로 관리하기 위해 Infrastructure as Code(IaC) 도구를 사용합니다. 이 가운데 Terraform과 AWS CloudFormation 같은 도구는 강력하고 유용한 기능을 제공하죠. 그러나 특정 도구의 전용 언어로 인프라를 구성하는 과정은 번거로울 때가 많은데요. 최근 나온 ‘Pulumi’라는 IaC 도구는 인프라를 편리하게 구성하고 관리하는 데 도움이 되는 기능을 다수 지원합니다. 이 글에서는 Pulumi의 특징을 알아보고, 이 도구로 AWS의 스토리지 서비스인 ‘S3’를 생성하는 방법을 살펴보겠습니다.

Pulumi의 세가지 특징

출처=Pulumi | 인포그랩 GitLab
출처=Pulumi

Pulumi는 IaC 도구로, 클라우드 인프라를 프로그래밍 언어로 정의하고 관리하는 데 사용할 수 있습니다. 특히 Pulumi는 다양한 클라우드 플랫폼과 서비스를 지원하는데요. 이로써 개발자와 운영팀이 ‘어느 클라우드 플랫폼과 서비스를 사용하는지’와 관계없이 Pulumi로 인프라를 자유롭고 편리하게 관리하도록 돕습니다. Pulumi의 서비스 특징은 다음과 같습니다.

다양한 클라우드 플랫폼과 서비스 지원

Pulumi는 AWS, Azure, Google Cloud, Kubernetes 등 여러 클라우드 플랫폼을 지원합니다. 이로써 사용자가 멀티 클라우드 환경에서 다양한 플랫폼을 넘나들며 효율적으로 작업할 수 있죠. 우리가 IaC 도구를 선택할 때 고려해야 할 요소가 바로 여러 클라우드 플랫폼 지원 여부와 확장성인데요. Pulumi는 이 요건을 충족합니다.

일반적인 프로그래밍 언어로 작성하는 인프라

Pulumi는 일반적인 프로그래밍 언어를 사용해 인프라를 구성하는 IaC 도구입니다. Terraform과 달리 Pulumi에서는 특정 전용 언어가 아닌 Go, Python, TypeScript, JavaScript, C#, Java, YAML 등 다양한 프로그래밍 언어를 사용해 인프라를 정의하고 관리할 수 있죠. 이로써 개발자는 자신에게 가장 편한 언어로 인프라를 구성하고 관리할 수 있습니다.

손쉬운 마이그레이션

Pulumi는 다른 IaC 도구에서 Pulumi로 마이그레이션 하도록 지원합니다. Terraform, AWS CloudFormation, Azure Resource Manager, Kubernetes YAML & Helm Charts에서 Pulumi로 마이그레이션 할 수 있는데요. 이미 다른 IaC 도구를 사용해 인프라를 구축했더라도 Pulumi로 전환하기가 어렵지 않습니다.

Pulumi로 S3 생성해 보기

Pulumi 사용법은 까다롭지 않습니다. 저는 Pulumi로 간단하게 AWS의 스토리지 서비스인 S3를 생성해 봤는데요. 지금부터 여러분에게 제 실습 과정을 소개하며 Pulumi 사용법을 더 자세히 살펴보겠습니다.

프로젝트 세팅

실습 환경은 다음과 같습니다. 실습을 진행하려면 S3 생성 권한이 있는 IAM 사용자를 생성하고요. AWS configure를 사용해 이를 등록해야 합니다.

OS : Mac
Language: python 3.11
Cloudplatform: AWS

그다음, Brew로 Pulumi를 설치하고 $pulumi new aws-python 으로 프로젝트를 설정합니다. 처음 Pulumi를 사용하면 ‘로그인이 필요하다’는 안내 메시지가 표시됩니다.

$ brew install pulumi/tap/pulumi

$ pulumi new aws-python
Manage your Pulumi stacks by logging in.
Run pulumi --help for alternative login options.
Enter your access token from [https://app.pulumi.com/account/tokens](https://app.pulumi.com/account/tokens)
or hit <ENTER> to log in using your browser

안내에 따라 브라우저를 실행해 회원가입하고, 로그인하면 됩니다.

Pulumi 로그인 화면. 출처=Pulumi | 인포그랩 GitLab
Pulumi 로그인 화면. 출처=Pulumi

Pulumi 사용자 계정 인증 화면. 출처=Pulumi | 인포그랩 GitLab
Pulumi 사용자 계정 인증 화면. 출처=Pulumi

로그인 완료 후, 프로젝트 설정을 위해 아래와 같이 프로젝트 이름, 설명, 스택의 이름과 리전을 입력하면 프로젝트가 생성됩니다.

Welcome to Pulumi!

...


Enter a value or leave blank to accept the (default), and press <ENTER>.
Press ^C at any time to quit.

project name: (pulumi-python):
project description: (A minimal AWS Pulumi program):
Created project 'pulumi-python'

Please enter your desired stack name.
To create a stack in an organization, use the format <org-name>/<stack-name> (e.g. `acmecorp/dev`).
stack name (dev):
Created stack 'dev'

aws:region: The AWS region to deploy into (us-east-1): ap-northeast-2

생성된 aws-python 프로젝트의 기본 파일 구조는 다음과 같습니다.

  • Pulumi.{stack_name}.yaml : 스택 정의. 스택마다 서로 다른 정의를 사용할 수 있습니다.
  • Pulumi.yaml : 이 파일은 Pulumi 프로젝트를 정의하며, 프로젝트의 설정과 의존성 정보를 담고 있습니다.
  • __main__.py : 이 파일은 Pulumi 애플리케이션의 스택 리소스를 정의하는 역할을 합니다.
  • requirements.txt : 프로젝트의 필수 라이브러리와 버전을 관리합니다.
  • venv : Python의 가상 환경 폴더입니다.

S3 생성

S3를 생성하는 코드는 다음과 같습니다.

"""__main__.py"""
import pulumi
from pulumi_aws import s3

"""
'my-bucket'이라는 이름의 AWS S3 버킷을 생성합니다.
Pulumi 코드에서 리소스를 정의하는 부분입니다.
"""
bucket = s3.Bucket('my-bucket')

"""
Pulumi export 함수를 사용하여 생성한 S3 버킷의 이름을 내보냅니다.
이렇게 내보낸 값은 CLI에서 리소스의 정보를 확인할 때 유용합니다.
"""
pulumi.export('bucket_name', bucket.id)

리소스 생성을 위해 $ pulumi up 을 입력하면 아래와 같이 변경 사항 등을 보여줍니다. yes 를 선택하면 실제 AWS 환경에 리소스가 생성됩니다.

2023-10-26-pulumi-3 | 인포그랩 GitLab

위에서 설정한 내보내기(export) 값을 아래와 같은 명령어로 조회할 수 있습니다.

$ pulumi stack output bucket_name
> my-bucket-f39272e

결과 확인

AWS에 로그인한 후, Amazon S3 콘솔로 이동하면 pulumi up 명령어로 생성한 버킷을 확인할 수 있습니다.

AWS Amazon S3 콘솔에서 확인한 버킷과 관련 내용. | 인포그랩 GitLab
AWS Amazon S3 콘솔에서 확인한 버킷과 관련 내용.

맺음말

지금까지 Pulumi의 특징과 사용법을 살펴봤습니다. Pulumi는 YAML이나 HCL과 같은 특수한 언어에 익숙하지 않은 개발자도 일반적인 프로그래밍 언어를 사용해 인프라를 구축하도록 지원합니다. 이로써 개발자가 인프라를 더 효율적으로 관리하고 운영할 수 있는데요. 앞으로 조직에서 인프라 구성, 관리 방식을 개선하는 수단으로 Pulumi를 참고하셔도 좋겠습니다.

인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 관련한 지원이 필요하시면 문의하기 로 연락 주십시오.