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
- Google Cloud'da altyapınızı modellemek için YAML programı yazma
- Pulumi'yi kullanarak bulut kaynaklarını hazırlayın ve yönetin
- 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
- 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.
- Proje adı, bu projenin katılımcılarının görünen adıdı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 (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğine (genellikle
PROJECT_ID
olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, siz de deneyin ve kullanılıp kullanılamadığına bakın. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, 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ğitimden sonra faturalandırılmamak 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ğerindeki ücretsiz deneme programına uygundur.
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
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. Komutların verdiği 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 dizini oluşturun
mkdir pulumi-lab && cd pulumi-lab
Proje dosyasını(Pulumi'ye giriş noktası) tanımlama
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 dizin oluşturma
mkdir yaml-repo
Aşağıdaki kaynak tanımlarıyla yaml-repo/Pulumi.yaml
dosyasını oluşturun
- Paket
- IAM Bağlama
- "Merhaba Dünya!" 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
Grup 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
Grupları 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 için temel hazırlama işlemi yapılır. Çıkışınız aşağıdaki gibi görünecektir
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ırarak tanımlanan çıkışları yazdırabilirsiniz.
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ünür
(output)
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ştirme
source py-repo/bin/activate
Pulumi.yaml proje dosyasını, Python programını işaret edecek şekilde güncelleyin. Çalışma süresinin 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
Grubu yeniden dağıtmayı deneyin ve evet'i seçin.
pulumi up
Herhangi bir değişiklik olmayacaktır ve çıkışınız aşağıdakine benzer şekilde görünecektir.
(output)
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 şöyle 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.