Quản lý Pulumi Config Cho Nhiều Môi Trường Với Python – Góc Nhìn DevOps/DevSecOps

KiloKilo
3 min read

Pulumi Config là gì?

Pulumi Config là một hệ thống tích hợp trong Pulumi, cho phép bạn lưu trữ và quản lý các tham số cấu hình cho các stack (môi trường) khác nhau. Mỗi stack có thể có một tệp cấu hình riêng (Pulumi.<stack-name>.yaml), trong đó bạn định nghĩa các giá trị key-value hoặc thậm chí các đối tượng JSON phức tạp. Pulumi Config hỗ trợ cả giá trị thông thường và bí mật (secrets) được mã hóa để đảm bảo an toàn.

Ví dụ, bạn có thể định nghĩa các thông số như:

  • Cổng ứng dụng (port).

  • URL cơ sở dữ liệu.

  • Khóa API hoặc thông tin nhạy cảm khác.

Trong hạ tầng hiện đại, việc tách biệt cấu hình giữa các môi trường dev, staging, prod là điều bắt buộc để đảm bảo:

  • Mỗi môi trường có tài nguyên và thông tin xác thực riêng biệt

  • Tránh rò rỉ thông tin nhạy cảm (secret/token)

  • Dễ dàng triển khai CI/CD theo từng môi trường

Khi sử dụng Pulumi với Python làm IaC (Infrastructure as Code), Pulumi Config chính là công cụ chủ lực để bạn đạt được điều đó.

Pulumi Config là hệ thống quản lý biến cấu hình (giống như .tfvars trong Terraform), cho phép bạn:

  • Khai báo giá trị cấu hình theo từng stack

  • Quản lý secret một cách bảo mật

  • Tự động ánh xạ biến cấu hình vào code Python

Giả sử bạn có project Pulumi như sau:

infra/
├── Pulumi.dev.yaml
├── Pulumi.staging.yaml
├── Pulumi.prod.yaml
├── __main__.py
└── Pulumi.yaml

Mỗi stack sẽ có thông tin cấu hình riêng biệt (VD: region, DB password, subnet, v.v.)

Khởi tạo project Pulumi Python

mkdir infra && cd infra
pulumi new aws-python

Chọn tên project, sau đó Pulumi sẽ tạo sẵn Pulumi.yaml__main__.py.

Tạo các stack

pulumi stack init dev
pulumi stack init staging
pulumi stack init prod

Cấu hình các biến

Ví dụ: bạn cần cấu hình vùng AWS và mật khẩu database.

# Cho stack dev
pulumi config set aws:region ap-southeast-1 --stack dev
pulumi config set dbPassword dev-pass --secret --stack dev

# Cho stack prod
pulumi config set aws:region ap-southeast-1 --stack prod
pulumi config set dbPassword prod-pass --secret --stack prod

Tạo file Pulumi.dev.yaml tự động:

config:
  aws:region: ap-southeast-1
  dbPassword:
    secure: v1:encrypted-data

Truy xuất biến trong code Python

Trong __main__.py:

import pulumi
import pulumi_aws as aws

config = pulumi.Config()
aws_config = pulumi.Config("aws")

# Lấy cấu hình thông thường
region = aws_config.require("region")

# Lấy biến nhạy cảm
db_password = config.require_secret("dbPassword")

# Demo tạo một secret trong AWS Secrets Manager
secret = aws.secretsmanager.Secret(
    "db-secret",
    name="db-password",
    description="Database password"
)

secret_value = aws.secretsmanager.SecretVersion(
    "db-secret-value",
    secret_id=secret.id,
    secret_string=db_password
)

pulumi.export("region", region)

Chạy theo từng môi trường

pulumi up --stack dev
pulumi up --stack staging
pulumi up --stack prod

Bạn có thể tích hợp điều này vào CI/CD pipeline dễ dàng:

bashCopyEditpulumi up --stack $ENVIRONMENT --yes

0
Subscribe to my newsletter

Read articles from Kilo directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Kilo
Kilo