Anda harus menyelesaikan proses migrasi konfigurasi untuk setiap aplikasi Cloud Foundry yang Anda migrasikan to Cloud Run. Migrasi konfigurasi terdiri atas hal-hal berikut:
- Mengonversi
manifest.yaml
Cloud Foundry keservice.yaml
Cloud Run . - Memasang layanan pendukung pada aplikasi untuk deployment ke Cloud Run.
- Men-deploy aplikasi Anda ke layanan Cloud Run.
Mengonversikan manifest.yaml
ke service.yaml
Anda harus mengkonversi manifes Cloud Foundry dan/atau flag CLI cf
menjadi YAML definisi layanan Cloud Run yang setara.
Cloud Run memerlukan setiap aplikasi untuk memiliki file YAML layanan yang terpisah. Untuk memigrasikan aplikasi dalam manifes Cloud Foundry ke file YAML layanan:
Kumpulkan setiap properti yang tercantum dalam tabel berikut untuk aplikasi Anda. Properti yang tidak diubah pada tingkat aplikasi mungkin telah digantikan dengan konfigurasi platform Cloud Foundry global. Lihat dokumentasi yang disediakan oleh administrator platform Anda untuk mendapatkan nilai sebenarnya
Properti Aplikasi Flag CLI v6 cf
Deskripsi name
Argumen NAME
Nama unik aplikasi di Cloud Foundry. command
-c
Perintah yang akan dijalankan di /bin/sh
atau/bin/bash
disk_quota
-k
Jumlah disk yang akan ditetapkan untuk aplikasi.
Satuan yang valid adalah:
M
,MB
,G
,r B
Kemungkinan default: 1G
docker.image
--docker-image
,-o
Image yang berisi aplikasi yang akan dijalankan. health-check-http-endpoint
T/A Endpoint yang digunakan untuk menentukan kondisi HTTP jika jenis health check-nya adalah HTTP. Default:
/
health-check-invocation-timeout
T/A Waktu dalam detik antara port individual dengan health check berbasis HTTP. Default: 1
health-check-type
--health-check-type
,-u
Jenis health check yang akan dijalankan pada aplikasi. Nilai yang valid adalah: port
,http
,none
,process
.Default:
port
instances
-i
Jumlah instance aplikasi yang akan dijalankan Cloud Foundry. Default: 1
memory
-m
Batas memori per instance untuk aplikasi. Satuan yang valid adalah:
M
,MB
,G
, atauGB
Kemungkinan default: 1G
timeout
-t
Jumlah detik yang diizinkan saat aplikasi dijalankan dengan health check pertama Kemungkinan default: 60
Kumpulkan informasi berikut untuk project Google Cloud dan penyiapan Cloud Run Anda:
Properti Deskripsi project_number
Nomor project untuk Project Google Cloud yang ingin Anda deploy. region
Wilayah tempat Anda ingin men-deploy aplikasi. vpc-access-connector
Nama konektor VPC yang administrator platform Anda inginkan untuk aplikasi berjalan. vpc-access-egress
Nama egress VPC yang administrator platform Anda inginkan untuk aplikasi berjalan. custom-audiences
Audiens kustom yang dapat melakukan autentikasi ke aplikasi Anda. serviceAccountName
Identitas yang akan digunakan aplikasi Anda di Google Cloud. image
Image aplikasi yang Anda buat pada langkah sebelumnya. Isi template berikut ke dalam file
service.yaml
di root project Anda
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
# Set this to be the name of your app
name: "APP_NAME"
# Set this to be the project number of the project you're deploying to.
namespace: "PROJECT_NUMBER"
labels:
# Set this to be the region you're deploying in.
cloud.googleapis.com/location: REGION
migrated-from: cloud-foundry
annotations:
run.googleapis.com/ingress: internal-and-cloud-load-balancing
spec:
template:
metadata:
annotations:
# Set to the greater of 1 or the `instances` attribute.
autoscaling.knative.dev/minScale: '1'
# Set to the greater of 1 or the `instances` attribute.
autoscaling.knative.dev/maxScale: '1'
run.googleapis.com/cpu-throttling: CPU_ALLOCATION
run.googleapis.com/startup-cpu-boost: 'true'
# Set to true if you rely on sticky sessions. These will be turned
# on in Cloud Foundry if the server sends a JSESSIONID cookie back
# on responses.
run.googleapis.com/sessionAffinity: 'false'
run.googleapis.com/execution-environment: gen2
# Set the following values to match what your platform administrator recommends.
run.googleapis.com/vpc-access-connector: ADMINISTRATOR_PROVIDED
run.googleapis.com/vpc-access-egress: ADMINISTRATOR_PROVIDED
run.googleapis.com/custom-audiences: ADMINISTRATOR_PROVIDED
spec:
# CF doesn't limit, but CR has a max of 1000.
containerConcurrency: 1000
# Default value for gorouter in PCF.
timeoutSeconds: 900
# Set the following value to match what your platform administrator recommends.
serviceAccountName: ADMINISTRATOR_PROVIDED
containers:
- name: user-container
# Set the following value to either:
# - The image you built for your application in the last section of the guide.
# - The docker.image attribute of your app's configuration if it's a Docker app.
image: IMAGE
# Set `command` based on the following rules:
# - If your app has no `command` attribute: null.
# - If your app has a docker.image attribute: ['/bin/sh', '-c']
# - Otherwise: ['/bin/bash', '-c']
command: null
# Set `args` based on the following rules:
# - If your app has no `command` attribute: null.
# - If your app has a `command` attribute: ['value of command']
args: null
ports:
# Set name based on the following rules:
# - If your app is HTTP/2 or gRPC: "h2c"
# - Else: "http1"
- name: HTTP1_OR_H2C
containerPort: 8080
env:
# For each key/value pair in your space's running environment variable groups,
# which can be retried by running `cf running-environment-variable-group`,
# add the following:
- name: KEY
value: VALUE
# For each key/value pair in your manifest's `env` map, add the following:
- name: KEY
value: VALUE
# Populate MEMORY_LIMIT with the amount of memory supplied to this instance
# in MiB with 'M' as a suffix.
- name: MEMORY_LIMIT
value: '0M'
# Set the following values in the JSON below:
# - `application_name` and `name` to match metadata.name in this file.
# - `application_uris` and `uris` to be the URI you want to assign the app on the
# load balancer.
# - `limits.disk` to be the amount (in MiB) of disk assigned to your app.
# The amount will be in the `disk_quota` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
# - `limits.mem` to be the amount (in MiB) of memory assigned to your app.
# The amount will be in your `memory` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
# - `space_name` to be the value of metadata.space in this file.
- name: VCAP_APPLICATION
value: |-
{
"application_id": "00000000-0000-0000-0000-000000000000",
"application_name": "app-name",
"application_uris": [],
"limits": {
"disk": 1024,
"mem": 256
},
"name": "app-name",
"process_id": "00000000-0000-0000-0000-000000000000",
"process_type": "web",
"space_name": "none",
"uris": []
}
resources:
limits:
# Set memory limit to be the sum of the memory and disk assigned to your app in CF.
#
# Disk amount will be in the `disk_quota` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
#
# Memory will be in your `memory` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
memory: MEMORY_LIMIT
# Set cpu according to the following calculation:
#
# 1. Take the amount of memory in your `memory` attribute of the CF
# manifest, or a default value for your cluster, typically 1GiB.
# 2. Divide that by the total amount of memory on the underlying BOSH VM.
# 3. Multiply that by the total number of CPUs on the BOSH VM.
# 4. Find the nearest valid value based on the rules in:
# https://cloud.google.com/run/docs/configuring/cpu#setting
cpu: CPU_LIMIT
# If `health-check-type` is "process" or "none", delete the startupProbe section.
startupProbe:
# If `health-check-type` is "port" or blank, delete the httpGet section.
httpGet:
# Set to be the value of `health-check-http-endpoint` or / if blank.
path: CHECK_PATH
port: 8080
# If `health-check-type` is "http", delete the tcpSocket section.
tcpSocket:
port: 8080
# Set to the value of `health-check-invocation-timeout` or 1
timeoutSeconds: 1
# Set failure threshold to be the following calculation:
#
# 1. Take the `timeout` from the CF manifest, use 60 if unset.
# 2. Divide by 2.
# 3. Round up to the nearest integer.
failureThreshold: 1
successThreshold: 1
periodSeconds: 2
# If `health-check-type` is "process" or "none", delete the livenessProbe section.
livenessProbe:
# If `health-check-type` is "port" or blank, delete the httpGet section.
httpGet:
# Set to be the value of `health-check-http-endpoint` or / if blank.
path: CHECK_PATH
port: 8080
# If `health-check-type` is "http", delete the tcpSocket section.
tcpSocket:
port: 8080
# Set to the value of `health-check-invocation-timeout` or 1.
timeoutSeconds: 1
failureThreshold: 1
successThreshold: 1
periodSeconds: 30
traffic:
- percent: 100
latestRevision: true
Memasang layanan pendukung
Anda harus membuat variabel lingkungan VCAP_SERVICES
untuk memungkinkan injeksi dan penemuan layanan oleh aplikasi Cloud Foundry Anda, seperti Spring atau Steeltoe. Anda harus selalu melakukan hal ini
untuk setiap aplikasi yang dimigrasikan. Baca dokumentasi Cloud Foundry VCAP_SERVICES untuk mengetahui informasi selengkapnya.
Jika aplikasi Anda sudah berjalan di Cloud Foundry dan Anda ingin terhubung ke layanan yang sama pada Cloud Run, gunakan variabel lingkungan yang ada. Jika tidak, Anda harus
membuat VCAP_SERVICES
baru.
Untuk mengkonfigurasi variabel lingkungan VCAP_SERVICES
:
Untuk
VCAP_SERVICES
yang sudah ada:- Coba dapatkan variabel lingkungan
VCAP_SERVICES
dengan menjalankancf env APP_NAME
. - Jika cara tersebut tidak berhasil:
- Hubungkan ke aplikasi Anda di Cloud Foundry:
cf ssh APP_NAME
- Jalankan perintah
env
dan dapatkan outputVCAP_SERVICES
. - Keluar dari sesi SSH dengan menjalankan
exit
.
- Hubungkan ke aplikasi Anda di Cloud Foundry:
- Simpan nilai
VCAP_SERVICES
ke dalam file baru bernamavcap.json
.
- Coba dapatkan variabel lingkungan
Jika Anda ingin menambahkan layanan atau terhubung ke layanan yang berbeda di Cloud Foundry, buat
VCAP_SERVICES
baru:- Di editor teks, buat peta JSON kosong
{}
- Untuk setiap layanan yang ingin Anda tambahkan, lakukan hal-hal berikut:
- Lihat dokumentasi untuk library yang digunakan aplikasi Anda untuk mengurai
VCAP_SERVICES
pada jenis yang ingin Anda tambahkan agar dapat memahami cara aplikasi menemukan pengikatnya. - Tambahkan kunci ke peta dengan nama penyedia layanan jika belum ada, biasanya seperti
mysql
,postgresql
, atauelasticsearch
. Tetapkan nilai menjadi array kosong: Tambahkan objek ke dalam array dengan properti seperti berikut:
Metadata yang biasanya tidak digunakan untuk menemukan/mengikat layanan:
binding_name
, sebuah string yang mewakili resource yang memberikan izin aplikasi pada layanan tersebut. Ini dapat berupa nama pengguna untuk database, aturan firewall, nama akun layanan, atau lainnya.instance_name
, sebuah string yang mewakili nama layanan pendukung. Ini dapat berupa nama database Anda, nilai acak, atau nilai sentinel untuk suatu layanan global.name
,binding_name
jika ada; jika tidak,instance_name
. Nilai ini biasanya tidak penting.label
, Nilai dari kunci yang ada dalam petaVCAP_SERVICES
tempat binding ini disusun.plan
, nama dari paket layanan. Contohnya mencakup: "user-provided", "high-availability".
Nilai yang sering digunakan untuk menemukan/mengikat layanan:
tags
Daftar tag untuk membantu library menemukan layanan yang kompatibel. Sering kali menyertakan nama umum untuk layanan, sepertimysql
untuk MySQL dan MariaDB,redis
untuk Redis atau Cloud Memorystore, ataupostgres
untuk database yang kompatibel dengan Postgres.credentials
Sebuah objek yang berisi kredensial yang digunakan oleh library klien untuk melakukan koneksi. Sebagian besar library klien mengandalkan kolomuri
yang berisi URI standar layanan atau berformat JDBC.
Simpan konten sebagai
vcap.json
.
- Di editor teks, buat peta JSON kosong
Melampirkan kredensial ke resource Cloud Run Anda
Untuk melampirkan kredensial:
Buat secret untuk menyimpan konten variabel lingkungan
VCAP_SERVICES
Anda dan catat versi dari output dengan perintah:gcloud secrets create APP_NAME-vcap \ --replication-policy="automatic" \ --data-file=vcap.json
Beri akun layanan aplikasi Anda izin untuk membaca secret:
gcloud secrets add-iam-policy-binding APP_NAME-vcap \ --member="serviceaccount:app-service-account" \ --role="roles/secretmanager.secretAccessor"
Tambahkan variabel lingkungan berikut ke
service.yaml
aplikasi Anda pada arrayspec.template.spec.containers[0].env array
:- name: VCAP_SERVICES valueFrom: secretKeyRef: key: Version output by step 1 name: APP_NAME-vcap
Template untuk layanan pendukung umum
Berikut informasi tentang layanan pendukung yang biasa digunakan
MySQL
Library MySQL biasanya memerlukan tag mysql
. Merupakan hal umum untuk menyertakan kunci berikut dalam credentials
:
uri
template:mysql://username:password@host:port/dbname
. Dokumentasi MySQL dapat membantu saat membuat string URI. Port yang biasanya digunakan adalah3306
.username
Nama pengguna koneksi, yang diperlukan oleh beberapa library meskipun disertakan dalamuri
password
Sandi koneksi, diperlukan oleh beberapa library meskipun disertakan dalamuri
Redis
Library Redis biasanya memerlukan tag redis
. Merupakan hal umum untuk menyertakan
kunci berikut dalam credentials
:
uri
Template:redis://:password@host:port/dbunumber
.
Dokumentasi URI Redis IANA
dapat membantu saat membuat string URI. Port yang biasanya digunakan adalah 6379
.
RabbitMQ
Library RabbitMQ biasanya memerlukan tag rabbitmq
dan kunci berikut di
credentials
:
uri
Template:amqp://username:password@host:port/vhost?query
.
Dokumentasi RabbitMQ dapat membantu
saat membuat string URI. Port yang biasanya digunakan adalah 5672
.
Layanan User-provided
Layanan User-provided adalah jenis layanan khusus di Cloud Foundry yang memungkinkan Anda memasukkan kredensial apa pun. Label yang digunakan selalu user-provided
. Tag adalah nilai yang diteruskan ke cf create-user-provided-service
melalui flag -t
, dan kredensialnya adalah konten dari flag -p
.
Men-deploy aplikasi Anda
Untuk men-deploy aplikasi Cloud Foundry yang dimigrasikan sepenuhnya ke layanan Cloud Run:
Jika Anda belum melakukannya, siapkan lingkungan Cloud Run mu.
Jalankan perintah
gcloud run services replace service.yaml
Tunggu sebentar sampai proses deployment selesai. Jika berhasil, command line akan menampilkan URL layanan.
Kunjungi layanan yang telah di-deploy dengan membuka URL layanan pada browser web.
Selamat! Anda baru saja memigrasikan aplikasi Cloud Foundry Anda ke Cloud Run