迁移到 Cloud SDK

独立版 App Engine SDK 已于 2019 年 7 月 30 日弃用,自 2020 年 8 月 30 日起不再提供下载。下表列出了已弃用的功能和建议的替代方案:

已弃用 推荐执行的操作
独立版 App Engine SDK 下载 Cloud SDK
appcfg 命令 从 AppCfg 迁移到 gcloud 命令行
dev_appserver.sh 命令 对于本地开发,请从 Cloud SDK 的 bin 目录运行 java_dev_appserver.sh 命令。
基于 Java App Engine SDK 的 Maven 插件 (com.google.appengine.appengine-maven) 迁移到基于 Cloud SDK 的 Maven 插件
基于 Java App Engine SDK 的 Gradle 插件 (com.google.appengine.appengine-gradle) 迁移到基于 Cloud SDK 的 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 已弃用,因此 Cloud SDK 目前不支持以下功能:

将 XML 迁移到 YAML 文件格式

Cloud SDK 不支持以下文件格式:

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

以下示例演示了如何将 xml 文件迁移到 yaml 文件。

自动迁移文件

要自动迁移 xml 文件,请执行以下操作:

  1. 您必须使用 Cloud SDK 版本 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. 在部署到生产环境之前手动仔细检查转换后的文件。

    如需查看成功将 xml 转换成 yaml 文件的示例,请参阅手动迁移文件标签页。

手动迁移文件

要手动将 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 文件,列表中的每个对象都包含与 dispatch.xml 文件中的每个 <dispatch> 标记特性相对应的字段,如下所示。

已转换的 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 文件,列表中的每个对象都包含与 queue.xml 文件中的每个 <queue> 标记特性相对应的字段,如下所示。

已转换的 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>