遷移至 gcloud CLI

App Engine SDK 獨立版已於 2019 年 7 月 30 日淘汰,並已全面停用。下表列出已淘汰的功能和建議的替代方案:

已淘汰 建議做法
App Engine SDK 獨立版 下載 Google Cloud CLI
使用 App Engine SDK 存取 App Engine 舊版 API 遷移至未綁定的 Google Cloud 或第三方服務,或使用 App Engine 服務 SDK 存取綁定的服務 (如果您使用第二代執行階段)
appcfg 指令 從 AppCfg 遷移至 gcloud 指令列
dev_appserver.sh 指令 如要進行本機開發,請從 gcloud CLI 的 bin 目錄執行 java_dev_appserver.sh 指令
Maven 適用且以 Java App Engine SDK 為基礎的外掛程式 (com.google.appengine.appengine-maven) 遷移至以 gcloud CLI 為基礎的 Maven 外掛程式
Gradle 適用且以 Java App Engine SDK 為基礎的外掛程式 (com.google.appengine.appengine-gradle) 遷移至以 gcloud CLI 為基礎的 Gradle 外掛程式
cron.xmldatastore-index.xmldispatch.xmlqueue.xml 檔案格式 使用 gcloud beta app migrate-config 工具自動遷移,或手動將 xml 遷移至 yaml 檔案

遷移時間表

2019 年 7 月 30 日:淘汰以 App Engine SDK 獨立版為基礎的工具。2020 年 8 月 30 日:App Engine SDK 獨立版將不再開放下載,並且可能無法正常運作。2020 年 8 月 30 日:Google 已關閉並移除對 App Engine SDK 獨立版的支援。

回溯不相容的功能

隨著 appcfg 工具和 App Engine SDK 獨立版的淘汰,gcloud CLI 將不再支援以下功能:

  • 使用 AppCfg 下載應用程式的檔案。

將 XML 轉換成 YAML 檔案格式

gcloud CLI 不支援下列檔案格式:

  • cron.xml
  • datastore-index.xml
  • dispatch.xml
  • queue.xml

以下範例說明如何將 xml 檔案轉換成 yaml 檔案。

自動遷移檔案

如何自動遷移 xml 檔案:

  1. 您必須具有 gcloud CLI 226.0.0 以上版本。如要更新至最新版本:

    gcloud components update
    
  2. 對您要遷移的每個檔案,指定下列其中一個子指令 (cron-xml-to-yamldatastore-indexes-xml-to-yamldispatch-xml-to-yamlqueue-xml-to-yaml) 和檔案名稱:

    gcloud beta app migrate-config queue-xml-to-yaml MY-QUEUE-XML-FILE.xml
    
  3. 在部署到實際工作環境之前,先手動再次檢查已轉換的檔案。

    如需 xmlyaml 的檔案成功轉換範例,請參閱「手動遷移檔案」一節的各分頁。

手動遷移檔案

如要手動將 xml 檔案遷移至 yaml 檔案,請按照下列步驟操作:

cron.yaml

使用包含物件清單的 cron 物件建立 cron.yaml 檔案,每個物件都包含與 cron.xml 檔案中每個 <cron> 標記屬性對應的欄位,如下所示。

轉換後的 cron.yaml 檔案:

cron:
- url: '/recache'
  schedule: 'every 2 minutes'
  description: 'Repopulate the cache every 2 minutes'
- url: '/weeklyreport'
  schedule: 'every monday 08:30'
  target: 'version-2'
  timezone: 'America/New_York'
  description: 'Mail out a weekly report'

原始 cron.xml 檔案:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/recache</url>
    <description>Repopulate the cache every 2 minutes</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday 08:30</schedule>
    <timezone>America/New_York</timezone>
    <target>version-2</target>
  </cron>
</cronentries>

詳情請參閱 cron.yaml 參考資料說明文件。

dispatch.yaml

使用包含物件清單的 dispatch 物件建立 dispatch.yaml 檔案,每個物件都包含與 � file 中每個 � 標記屬性對應的欄位,如下所示。<dispatch>dispatch.xml

轉換後的 dispatch.yaml 檔案:

dispatch:
- url: '*/favicon.ico'
  module: default
- url: 'simple-sample.uc.r.appspot.com/'
  module: default
- url: '*/mobile/*'
  module: mobile-frontend

原始 dispatch.xml 檔案

<?xml version="1.0" encoding="UTF-8"?>
<dispatch-entries>
  <dispatch>
      <url>*/favicon.ico</url>
      <module>default</module>
  </dispatch>
  <dispatch>
      <url>simple-sample.uc.r.appspot.com/</url>
      <module>default</module>
  </dispatch>
  <dispatch>
      <url>*/mobile/*</url>
      <module>mobile-frontend</module>
  </dispatch>
</dispatch-entries>

詳情請參閱 dispatch.yaml 參考資料說明文件。

index.yaml

使用包含物件清單的 indexes 物件建立 index.yaml 檔案,每個物件都包含與 datastore-indexes.xml 檔案中每個 <datastore-index> 標記屬性對應的欄位,如下所示。

轉換後的 index.yaml 檔案:

indexes:
- ancestor: false
  kind: Employee
  properties:
  - direction: asc
    name: lastName
  - direction: desc
    name: hireDate
- ancestor: false
  kind: Project
  properties:
  - direction: asc
    name: dueDate
  - direction: desc
    name: cost

原始 datastore-index.xml 檔案:

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
 autoGenerate="true">
   <datastore-index kind="Employee" ancestor="false">
       <property name="lastName" direction="asc" />
       <property name="hireDate" direction="desc" />
   </datastore-index>
   <datastore-index kind="Project" ancestor="false">
       <property name="dueDate" direction="asc" />
       <property name="cost" direction="desc" />
   </datastore-index>
</datastore-indexes>

詳情請參閱 index.yaml 參考資料說明文件。

queue.yaml

使用包含物件清單的 queue 物件建立 queue.yaml 檔案,每個物件都包含與 � file 中每個 � 標記屬性對應的欄位,如下所示。<queue>queue.xml

轉換後的 queue.yaml 檔案:

queue:
- name: fooqueue
  mode: push
  rate: 1/s
  retry_parameters:
    task_retry_limit: 7
    task_age_limit: 2d
- name: barqueue
  mode: push
  rate: 1/s
  retry_parameters:
    min_backoff_seconds: 10
    max_backoff_seconds: 200
    max_doublings: 0

原始 queue.xml 檔案:

<queue-entries>
  <queue>
    <name>fooqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      <task-retry-limit>7</task-retry-limit>
      <task-age-limit>2d</task-age-limit>
    </retry-parameters>
  </queue>
  <queue>
    <name>barqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      <min-backoff-seconds>10</min-backoff-seconds>
      <max-backoff-seconds>200</max-backoff-seconds>
      <max-doublings>0</max-doublings>
    </retry-parameters>
  </queue>
<queue-entries>