본문 바로가기

Develop/DevOps

[Pulumi] 로컬 환경 세팅 또는 AWS 세팅 방법

반응형

Pulumi 로컬 세팅 방법 정리

# pulumi사용하기전에 Login을 해줘야하는데 클라우드가 아닌 로컬에 세팅할경우엔 아래와같은 명령어를 실행
pulumi login --local
# Logged in to JAEYUNGui-MacBookPro.local as jaeyunglee (file://~)

# login에 대한 정보를 어디에 저장할지 지정
pulumi login file:///Users/jaeyunglee/Desktop/jaeyung/pulumi_test
# Logged in to JAEYUNGui-MacBookPro.local as jaeyunglee (file:///Users/jaeyunglee/Desktop/jaeyung/pulumi_test)
# ls -al 을 실행하면 .pulumi 라는 폴더가 생성됨

# 이제 pulumi에 대한 프로젝트 생성
# pulumi new [이름] 명령어는 아무것도없는 폴더에서 진행되어야함
pulumi new --secrets-provider=passphrase
# 각종 정보 입력
# 중요한 정보
# 1. template 잘선택 (ex. aws면 aws-python)
# 2. passphrase를 기억해야함
export PULUMI_CONFIG_PASSPHRASE=$(위에서 입력한 값)

# (optional) 만약 aws 리소스 생성이라면 아래와같이 access key, secret key설정해줘야함
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""

# pulumi up 실행
# aws-python에서는 샘플코드로 s3버킷 생성하는 코드가 들어있음
pulumi up

 

만일 pulumi template을 사용안할 경우에는

  • Pulumi.yaml파일이 최상위 디렉토리에 존재하며 아래와같은 코드형식으로 저장되어야함
name: <project>
runtime:
  name: python
backend:
  url: s3://<bucket>[?region=<region>&profile=<profile>]

만일 Pulumi State를 s3에 저장하고 싶을경우 (S3 세팅 방법)

# AWS config가 세팅되어있다라는 가정하에
pulumi login s3://BUCKET_NAME

s3 버킷 생성

  • 작업하면서 알았지만 pulumi up할때는 무조건 __main__.py 파일을 봄. 따라서 별도로 파이썬 코드 파일을 생성했더라도 __main__.py 파일에 import가 안되어있으면 리소스 반영이 안됨.
# s3.py
import pulumi
import pulumi_aws as aws

example = aws.s3.BucketV2("example",
    bucket="my-tf-test-bucket",
    tags={
        "Name": "My bucket",
        "Environment": "Dev",
    })
# __main__.py
"""An AWS Python Pulumi program"""

import s3 # 위에서 생성한 s3.py import

AWS 계정 생성 관련

유저 생성 및 콘솔 로그인 초기 패스워드 확인방법

  • 매 유저의 Console Access 는 UserLoginProfile 요소가 존재하게되면 자동으로 Access가 가능
  • Access Key & Secret Key 얻는법
    • 아래 코드에서 pulumi.export를 통해 얻어올수있지만 secretKey같은경우에는 block처리가 되어있음. 따라서 다음과같은 pulumi CLI로 얻어올수있음
      • pulumi.export 는 pulumi up 명령어를 수행할때 output으로 지정된 값을 볼수있음
    • "pulumi stack output {user}_secretKey --show-secrets"
jaeyung_lee = aws.iam.User("jaeyung_lee", name="jaeyung_lee")
jaeyung_lee_group = aws.iam.UserGroupMembership("jaeyung_lee_group",
    user = jaeyung_lee,
    groups= [devops])

# console login 설정
example_user_login_profile = aws.iam.UserLoginProfile("example",
    user = jaeyung_lee.name,
    password_reset_required=True # 처음 접근시 패스워드 재설정
    )

pulumi.export("password_str", example_user_login_profile.password) # 초기 패스워드 확인가능

# AccessKey, SecretKey 설정
user_access_key = aws.iam.AccessKey(f"{user}_access_key", user=user_info.name)
pulumi.export(f"{user}_accessKey", user_access_key.id)
pulumi.export(f"{user}_secretKey", user_access_key.secret)

TMI

  • Pulumi는 하나의 Project에서 여러개의 Stack이 존재 할 수 있음. 따라서 Stack별 폴더 생성할때는 아래와같은 방식으로 해야할것같음
    • Project의 폴더를 생성하고
    • Stack에 대한 폴더를 생성하고 진입 (cd Project/Stack)
    • pulumi new --stack [STACK_NAME] --name [PROJECT_NAME]
  • Pulumi.yaml 파일에 name은 Project명을 따라간다
  • 만약에 stack을 생성하지않고 project만 생성하고싶을 경우에는 pulumi new -g 옵션을 활용한다 (근데 이건 Pulumi를 잘모른다면 비추천같음
반응형