Pulumi - Get started

Primeros pasos con esta herramienta de IaC.

Pulumi es una herramienta que permite administrar infraestructura como código (IaC), principalmente en servicios cloud (AWS, GCP y Azure) y en kubernetes.

Instalación (Ubuntu)

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

# Agregar al PATH
export PATH=$PATH:/root/.pulumi/bin

Primeros pasos

pulumi version
pulumi new # Crea un nuevo proyecto usando un template
pulumi stack # Administra tus stacks
pulumi config # Configura variables como claves, regiones, etc.
pulumi up # Vista previa e implementación de cambios
pulumi preview # Vista previa de los cambios
pulumi destroy # Elimina tu programa y su infraestructura

Pulumi & GCP (Usando python)

Instalar gcloud CLI y configurar la cuenta.

Obtener las credenciales de aplicación predeterminadas que Pulumi utiliza, para obtener las de la cuenta de google ejecutar el comando:

gcloud config set project [YOUR_GCP_PROJECT_ID]

# Generar el fichero de credenciales de aplicación predeterminadas
gcloud auth application-default login

Para inicializar un proyecto es necesario tener una cuenta en Pulumi, cuando inicies el proyecto en local, pedirá las credenciales a través del navegador o un token de acceso.

mkdir quickstart && cd quickstart
pulumi new gcp-python
# Indicar el token o login a través del navegador

Esto genera el stack en la plataforma de pulumi y los ficheros de configuración básica para dar de alta un bucket en GCP

pulumi up
# Se visualizan los elementos que se van a crear y solicita confirmación

# Puedes recuperar el nombre del bucket que se ha definido como output
pulumi stack output bucket_name # gs://test-bucket-f4c685a

Agregar el fichero index.html al directorio principal del proyecto.

<html>
<body>
<h1>Hello, Pulumi!</h1>
</body>
</html>

Agregar el fichero al bucket y las políticas de acceso al fichero

bucket_object = storage.BucketObject(
    "index.html", bucket=bucket.name, source=pulumi.FileAsset("index.html")
)

bucket_iam_binding = storage.BucketIAMBinding(
    "my-bucket-binding",
    bucket=bucket.name,
    role="roles/storage.objectViewer",
    members=["allUsers"],
)
pulumi up
# Confirma los cambios

# Muestra los ficheros del bucket
gsutil ls $(pulumi stack output bucket_name)

Agrega la directiva website y uniform_bucket_level_access en la definición del bucket y exporta la url de acceso a la web

# Definición del bucket
bucket = storage.Bucket(
  'test-bucket',
  location="EU",
  website={
        "main_page_suffix": "index.html"
    },
    uniform_bucket_level_access=True,
)

# Exportar la url de la web
pulumi.export(
    "bucket_endpoint",
    pulumi.Output.concat(
        "http://storage.googleapis.com/", bucket.id, "/", bucket_object.name
    ),
)
pulumi up
curl $(pulumi stack output bucket_endpoint)

Obtendremos el contenido de index.html

<html>
<body>
<h1>Hello, Pulumi!</h1>
</body>
</html>
pulumi destroy

https://www.pulumi.com/registry/