1. Genel Bakış
Bu laboratuvarda, Google Cloud kaynaklarını sağlama ve yönetme için bir kod olarak altyapı aracı olan Pulumi'yi nasıl kullanacağınız öğretilmektedir.
Öğrenecekleriniz
Bu laboratuvarda şunları yapmayı öğreneceksiniz:
- Pulumi'yi yükleme ve yapılandırma
- Google Cloud'daki altyapınızı modellemek için YAML programı yazma
- Pulumi kullanarak bulut kaynaklarını sağlama ve yönetme
- YAML programını Python programına dönüştürmek için pulumi convert komutunu kullanın.
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve 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.



- 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. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
3. Altyapı kurulumu
Pulumi'yi yükleme ve yapılandırma
Cloud Shell'de Pulumi'yi yüklemek için aşağıdaki komutu çalıştırın:
curl -fsSL https://get.pulumi.com | sh
Pulumi'yi yola ekleme ve Pulumi'den yardım mesajını görüntüleme
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. Komutların verdiği talimatları uygulamanız gerekir.
export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login
Cloud Shell'de GCS paketi oluşturma ve bunu arka uç olarak kullanma
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(Pulumi'ye 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 tutacak bir dizin oluşturun
mkdir yaml-repo
Aşağıdaki kaynak tanımlarıyla yaml-repo/Pulumi.yaml dosyasını oluşturun.
- Paket
- IAM Bağlama
- "Hello World!" dizesini içeren bir metin nesnesi
- 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
Yığını başlatma ve 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ğinizle birlikte gcp:project anahtarını görmeniz gerekir.
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. Öncelikle, komutu kullandığınızda yapılacak değişikliklerin ana hatlarını gösteren bir önizleme gösterilir.
(Çı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 sağlanır. Çıkışınız şu şekilde 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 komutu çalıştırmak, tanımlanan çıkışları yazdırı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ünecek:
(çıkış)
gs://my-bucket-11a9046/index-object-77a5d80
4. YAML'yi Python'a dönüştürme
Yukarıdaki örneği Pulumi Python programına dönüştürelim
pulumi convert --language python --out ./py-repo
py-repo içinde 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ştirme
source py-repo/bin/activate
Pulumi.yaml proje dosyasını python programına yönlendirecek şekilde güncelleyin. Çalışma süresinin ve ana girişin değiştiğini fark edin.
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: python
main: py-repo/
EOT
Yığını yeniden dağıtmayı deneyin ve evet'i seçin.
pulumi up
Herhangi bir değişiklik olmamalı ve çıkışınız aşağıdaki gibi görünmelidir.
(çı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ı silme
Oluşturulan kaynakları silme
pulumi destroy
Onayınız şu şekilde görünür:
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.