YAML ile Google Cloud'da Pulumi'yi kullanma

1. Genel Bakış

Bu laboratuvarda, Google Cloud kaynaklarını sağlamak ve yönetmek için bir kod olarak altyapı aracı olan Pulumi'nin nasıl kullanılacağı öğretilmektedir.

Öğrenecekleriniz

Bu laboratuvarda aşağıdakileri nasıl yapacağınızı öğreneceksiniz:

  • Pulumi'yi yükleme ve yapılandırma
  • Altyapınızı Google Cloud'da modellemek için YAML programı yazma
  • Pulumi'yi kullanarak Cloud kaynaklarını hazırlama ve yönetme
  • YAML programını python programına dönüştürmek için pulumi dönüştürme işlevini kullanma

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğini (genellikle PROJECT_ID olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır.
  • Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

3. Altyapı kurulumu

Pulumi'yi Yükleme ve Yapılandırma

Pulumi'yi yüklemek için Cloud Shell'de aşağıdaki komutu çalıştırın

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

Yola Pulumi'yi ekleyin ve Pulumi'den gelen yardım mesajını görüntüleyin

export PATH=${PATH}:~/.pulumi/bin
# view the help message to verify pulumi runs
pulumi -h

Proje kimliğini ayarlamak ve erişimi yetkilendirmek için aşağıdaki komutları çalıştırın. Talimatlarda belirtilen talimatları uygulamanız gerekir.

export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login

Cloud Shell'de bir GCS paketi oluşturun ve bu paketi arka uç olarak kullanın

gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}

Yeni proje oluştur

Cloud Shell'de proje kök dizinini oluşturun

mkdir pulumi-lab && cd pulumi-lab

Proje dosyasını tanımlayın(Plumi'nin giriş noktası)

cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi

runtime: yaml
main: yaml-repo/
EOT

YAML kaynaklarını tanımlama

Bulut kaynağı tanımlarını yaml biçiminde tutmak için dizin oluşturma

mkdir yaml-repo

Aşağıdaki kaynak tanımlarıyla yaml-repo/Pulumi.yaml dosyasını oluşturun

  1. Paket
  2. IAM Bağlama
  3. "Hello World!" dizesini içeren bir metin nesnesi
  4. Bazı çıkışlar
resources:
  # Create a GCP resource (Storage Bucket)
  my-bucket:
    type: gcp:storage:Bucket
    properties:
      location: US
      website:
        mainPageSuffix: index.html
      uniformBucketLevelAccess: true

  my-bucket-binding:
    type: gcp:storage:BucketIAMBinding
    properties:
      bucket: ${my-bucket.name}
      role: "roles/storage.objectViewer"
      members: ["allUsers"]

  index-object:
    type: gcp:storage:BucketObject
    properties:
      bucket: ${my-bucket}
      source:
        fn::stringAsset: Hello World!

outputs:
  bucketName: ${my-bucket.url}

Kaynakları dağıtma

İlk kullanıma hazırlama ve yığını yapılandırma

export PULUMI_CONFIG_PASSPHRASE=pulumi-lab
pulumi stack init dev
pulumi config set gcp:project $PROJECT_ID

Yığın yapılandırmasını kontrol edin. Değer olarak proje kimliğinizi içeren gcp:project anahtarını görürsünüz

pulumi config

Bu noktada dizin yapısı aşağıdaki gibi görünmelidir:

├── Pulumi.dev.yaml
├── Pulumi.yaml
└── yaml-repo
    └── Pulumi.yaml

Yığını dağıtma

pulumi up

Bu komut, programınızı değerlendirir ve yapılacak kaynak güncellemelerini belirler. İlk olarak,

(Çıkış)

Previewing update (dev):
Downloading plugin gcp v6.44.0: 45.69 MiB / 45.69 MiB [=============] 100.00% 1s
     Type                             Name               Plan
 +   pulumi:pulumi:Stack              pulumi-lab-dev     create
 +   ├─ gcp:storage:Bucket            my-bucket          create
 +   ├─ gcp:storage:BucketObject      index-object       create
 +   └─ gcp:storage:BucketIAMBinding  my-bucket-binding  create


Outputs:
    bucketName: output<string>

Resources:
    + 4 to create

Do you want to perform this update?  [Use arrows to move, type to filter]
  yes
> no
  details

Evet'i seçtiğinizde kaynakların temel hazırlığı yapılır. Çıkışınız aşağıdaki gibi görünmelidir:

Do you want to perform this update? yes
Updating (dev):
     Type                             Name               Status
 +   pulumi:pulumi:Stack              pulumi-lab-dev     created (3s)
 +   ├─ gcp:storage:Bucket            my-bucket          created (1s)
 +   ├─ gcp:storage:BucketObject      index-object       created (0.78s)
 +   └─ gcp:storage:BucketIAMBinding  my-bucket-binding  created (5s)


Outputs:
    bucketName: "gs://my-bucket-874aa08"

Resources:
    + 4 created

Duration: 11s

Aşağıdaki komut çalıştırıldığında, tanımlı çıkışlar yazdırılır

pulumi stack output

Değişikliği doğrulamak için aşağıdaki komutu çalıştırın

gsutil ls $(pulumi stack output bucketName)

Çıkışınız aşağıdaki gibi görünecektir:

(çıkış)

gs://my-bucket-11a9046/index-object-77a5d80

4. YAML'yi Python'a dönüştürün

Yukarıdaki örneği bir Pulumi Python programına dönüştürelim

pulumi convert --language python --out ./py-repo

py-repo'da oluşturulan kodu inceleyin

cat py-repo/__main__.py

(çıkış)

import pulumi
import pulumi_gcp as gcp

my_bucket = gcp.storage.Bucket("my-bucket",
    location="US",
    website=gcp.storage.BucketWebsiteArgs(
        main_page_suffix="index.html",
    ),
    uniform_bucket_level_access=True)
my_bucket_binding = gcp.storage.BucketIAMBinding("my-bucket-binding",
    bucket=my_bucket.name,
    role="roles/storage.objectViewer",
    members=["allUsers"])
index_object = gcp.storage.BucketObject("index-object",
    bucket=my_bucket.id,
    source=pulumi.StringAsset("Hello World!"))
pulumi.export("bucketName", my_bucket.url)
.......

Python sanal ortamını etkinleştirin

source py-repo/bin/activate

Pulumi.yaml proje dosyasını Python programına işaret edecek şekilde güncelleyin. Çalışma zamanının ve ana girişin değiştirildiğine dikkat edin

cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi

runtime: python
main: py-repo/
EOT

Yığını yeniden dağıtmayı deneyin ve yes'i (evet) seçin.

pulumi up

Herhangi bir değişiklik olmaması ve çıkışınız şuna benzer şekilde görünecektir

(çıkış)

Previewing update (dev):
     Type                 Name            Plan
     pulumi:pulumi:Stack  pulumi-lab-dev


Resources:
    4 unchanged

Do you want to perform this update? yes
Updating (dev):
     Type                 Name            Status
     pulumi:pulumi:Stack  pulumi-lab-dev


Outputs:
    bucketName: "gs://my-bucket-c2b49ad"

Resources:
    4 unchanged

Duration: 6s

5. Kaynakları silin

Oluşturulan kaynakları silme

pulumi destroy

Onayınız aşağıdaki gibi görünecektir

Previewing update (dev):
     Type                 Name            Plan
     pulumi:pulumi:Stack  pulumi-lab-dev


Resources:
    4 unchanged

Do you want to perform this update?  [Use arrows to move, type to filter]
  yes
> no
  details


Do you want to perform this destroy? yes
Destroying (dev):
     Type                             Name               Status
 -   pulumi:pulumi:Stack              pulumi-lab-dev     deleted
 -   ├─ gcp:storage:BucketIAMBinding  my-bucket-binding  deleted (5s)
 -   ├─ gcp:storage:BucketObject      index-object       deleted (1s)
 -   └─ gcp:storage:Bucket            my-bucket          deleted (0.73s)


Outputs:
  - bucketName: "gs://my-bucket-874aa08"

Resources:
    - 4 deleted

Duration: 10s

6. Tebrikler!

Tebrikler, laboratuvarı tamamladınız.