Pulumi로 인프라 구축하기

오늘날 많은 팀이 인프라를 코드로 관리하기 위해 Infrastructure as Code(IaC) 도구를 사용합니다. 이 가운데 Terraform과 AWS CloudFormation 같은 도구는 강력하고 유용한 기능을 제공하죠. 그러나 특정 도구의 전용 언어로 인프라를 구성하는 과정은 번거로울 때가 많은데요. 최근 나온 ‘Pulumi’라는 IaC 도구는 인프라를 편리하게 구성하고 관리하는 데 도움이 되는 기능을 다수 지원합니다. 이 글에서는 Pulumi의 특징을 알아보고, 이 도구로 AWS의 스토리지 서비스인 ‘S3’를 생성하는 방법을 살펴보겠습니다.
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
or hit <ENTER> to log in using your browser
안내에 따라 브라우저를 실행해 회원가입하고, 로그인하면 됩니다.


로그인 완료 후, 프로젝트 설정을 위해 아래와 같이 프로젝트 이름, 설명, 스택의 이름과 리전을 입력하면 프로젝트가 생성됩니다.
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 환경에 리소스가 생성됩니다.

위에서 설정한 내보내기(export) 값을 아래와 같은 명령어로 조회할 수 있습니다.
$ pulumi stack output bucket_name
> my-bucket-f39272e
결과 확인
AWS에 로그인한 후, Amazon S3 콘솔로 이동하면 pulumi up 명령어로 생성한 버킷을 확인할 수 있습니다.

맺음말
지금까지 Pulumi의 특징과 사용법을 살펴봤습니다. Pulumi는 YAML이나 HCL과 같은 특수한 언어에 익숙하지 않은 개발자도 일반적인 프로그래밍 언어를 사용해 인프라를 구축하도록 지원합니다. 이로써 개발자가 인프라를 더 효율적으로 관리하고 운영할 수 있는데요. 앞으로 조직에서 인프라 구성, 관리 방식을 개선하는 수단으로 Pulumi를 참고하셔도 좋겠습니다.
인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 관련한 지원이 필요하시면 문의하기로 연락 주십시오.
사전 동의 없이 2차 가공 및 영리적인 이용을 금하며, 온·오프라인에 무단 전재 또는 유포할 수 없습니다.
John
DevOps Engineer
InfoGrab의 DevOps Engineer로서, DevOps 전환을 메인 업무로 수행하고 있습니다. Omnibus·Docker Compose 기반 GitLab 인스턴스 운영과 업그레이드, CI/CD 파이프라인 개선, Runner 관리 등 GitLab 운영 전반을 담당하며, 다수 고객사의 마이그레이션·정기점검·기술 교육까지 폭넓게 다룹니다. 최근에는 AI를 활용한 운영 자동화, CLI 도구 개발 등 AI Native 방식으로 반복 업무를 줄이고 운영 효율을 높이는 데 관심을 두고 있습니다.
이 저자의 글 모두 보기 →DevOps 도입이 필요하신가요?
인포그랩 전문가가 맞춤 을 도와드립니다.
관련 글

Pulumi로 GitLab 리소스 효과적으로 관리하기
Pulumi는 IaC 도구로, 인프라를 편리하게 구성하고 관리하는 데 도움이 됩니다. 특히 이는 CI/CD를 작동시킬 때 필요한 사전 작업을 편리하게 수행하도록 지원하는데요. 이 글은 Pulumi를 사용해 GitLab 리소스를 생성하는 방법을 알아보고요. GitLab에서 Pulumi로 IaC 자동화를 진행하는 방법도 살펴봤습니다.
2024년 4월 17일

Terraform 개념 잡기
Terraform을 사용하기 전에 알아야 할 기본 개념을 알아봅니다.
2023년 1월 25일

Terraform Loop을 효과적으로 사용하기
클라우드에서 인프라를 구축을 할 때 비용 절감, 배포 속도 향상, 일관성, 안정성 및 재사용성을 고려하여 웹 콘솔로 구축하기보다는 IaC(Infrastructure as Code) 도구를 활용하여 구축하는 것이 좋습니다. 오픈소스이며 IaC 도구 중 가장 많이 사용하는 것이 Terraform입니다. Terraform 코드를 효율적이고 효과적으로 작성하기 위해서는 Terraform에서 제공되는 기능들을 적절하게 사용하는 것이 중요합니다. 그렇지 않으면 예상과 다른 결과가 발생할 수 있습니다. 이번 글에서는 Terraform에서 제공하는 각 반복문의 특징과 차이점을 알아보겠습니다.
2022년 10월 21일