Skip to main content

Pulumi


Installation

AWS

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
  • AWS Access Key ID and Access Key: IAM -> 사용자 -> <user> -> 보안 자격 증명 -> 액세스 키 만들기
aws configure --profile <profile>

S3

  • ACL 비활성화됨
  • 모든 퍼블릭 액세스 차단
  • 버킷 버전 관리 활성화
  • 기본 암호화 활성화

Pulumi

curl -fsSL https://get.pulumi.com | sh

Tutorial

test
├── __init__.py
├── __main__.py
├── Pulumi.test.dev.yaml
├── Pulumi.yaml
└── src
├── __init__.py
├── variable.py
└── ec2
├── __init__.py
├── output.py
└── ec2.py
mkdir test && cd test
pulumi_config_passphrase
<암호>
export PULUMI_CONFIG_PASSPHRASE_FILE=<path>/pulumi_config_passphrase

또는

export PULUMI_CONFIG_PASSPHRASE=<암호>
Pulumi.yaml
name: <project>
runtime:
name: python
backend:
url: s3://<bucket>
pulumi stack init test.dev
Pulumi.test.dev.yaml
encryptionsalt: "*****"
config:
aws:region: <region>
aws:profile: <profile>
<project>:github: <repo>
info

backend.url을 공유하는 여러 프로젝트는, stack이름으로 접근이 가능합니다.(pulumi.StackReference) 따라서 stack이름을 지을 때, <project>.<sub-project>.prod 등의 형식으로 짓는 것이 좋습니다.(s3를 backend로 할 때 아직 <organization>/<project>/<stack>을 지원하지 않는 것 같습니다.)

src/variable.py
import pulumi

stack_name = pulumi.get_stack()

config = pulumi.Config()
github = config.require("github")
src/ec2/ec2.py
import pulumi
import pulumi_aws as aws

from .. import variable

name = "app_server"
aws_instance = aws.ec2.Instance(
name,
ami="ami-090717c950a5c34d3",
instance_type="t3.micro",
tags={
"Name": name,
"Stack": variable.stack_name,
"Github": variable.github,
},
)
src/ec2/output.py
import pulumi

from . import ec2

pulumi.export("instance_id", ec2.aws_instance.id)
pulumi.export("instance_public_ip", ec2.aws_instance.public_ip)
info

outputpulumi stack output 명령어를 통해 확인할 수 있고, 다른 stack에서 pulumi.StackReference를 통해 접근할 수 있습니다.

src/ec2/__init__.py
from . import ec2, output
__main__.py
from src import ec2
pulumi refresh --yes --skip-preview
pulumi up
pulumi destroy --skip-preview
pulumi stack rm test.dev

Reference