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
- 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ı 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.
- 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
- 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
İ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.