从 Heroku 到 Code Engine 的迁移入门
欢迎 Heroku 用户访问 IBM Cloud® Code Engine。
Code Engine 是一个完全受管的无服务器平台,用于运行容器化工作负载。Code Engine 甚至通过源代码为您构建容器映像。 设计Code Engine体验的目的是让您专注于编写代码,而不是托管所需的基础设施。
Code Engine 设计时考虑了以下关键目标。
- 关注代码。Code Engine 提供简化的开发者体验。 无需了解或管理底层基础架构。
- 支持现代运行时特征,例如自动缩放,空闲时缩放为零,以及与受管服务和安全性的无缝集成。
- 支持所有基于云的本机应用程序,无论它们是 12 因子应用程序,事件驱动的函数还是运行到完成的批处理作业。 如果它可以容器化,那么 Code Engine 可以运行它。
- 仅为实际使用的资源付费。
如果您来自 Heroku 背景,那么这些功能中的许多功能听起来都很熟悉。 但是,Code Engine 还包含一些新功能,这些新功能允许您超越 Heroku 提供的功能,包括可扩展为零且无需费用的应用程序。 此外,Code Engine 需要包含 免费层的现收现付帐户。 因此,在您经历了用户体验的语法差异之后,您和您的应用程序将在 Code Engine中的主场感受。
目标
- 了解 Code Engine 与 Heroku 之间的相似性。
- 了解在 Code Engine中部署应用程序的常规过程。
- 使用 Code Engine在本地系统上从代码部署应用程序。
先决条件
在开始使用 Code Engine之前,需要设置帐户并安装 CLI。
-
所有 Code Engine 用户都需要具有现收现付帐户。
-
当您可以通过控制台使用 Code Engine 时,本文档中的示例将重点放在命令行上。 因此,必须安装 Code Engine CLI。
ibmcloud plugin install code-engine
有关更多信息,请参阅设置 Code Engine CLI。 有关 CLI 的更多信息,请参阅 Code Engine CLI 参考。
比较 Heroku 和 Code Engine 术语
开始在 Code Engine中部署应用程序之前,请先了解有关 Code Engine的基础知识。 下表描述了 Cloud Foundry 与 Code Engine之间的一些高级术语差异。
Heroku | Code Engine | 描述 |
---|---|---|
不适用 | 资源组和项目 | 一组工作负载。 用户定义了进入每个分组的工作负载的特定选项。 “资源组”是 IBM Cloud 概念,而“项目”特定于 Code Engine。 项目提供工作负载之间的隔离级别。 请参阅 管理项目。 |
迪诺斯 | 容器 | Dyno 是一个轻量级容器,用于运行您的 Heroku 代码并为您管理。 在 Code Engine中,底层容器基于 Kubernetes 并自动为您管理。 |
应用程序 | 应用程序 (APP) | 响应来自 REST API,Web 页面请求或事件等的 HTTP 请求的工作负载。Code Engine 要求应用程序将 HTTP 服务器作为代码的一部分包含在内。Code Engine 应用程序根据传入负载自动缩放 (向上和向下)。 如果需要,您可以配置最小和最大规模。 缺省情况下,应用程序侦听端口 8080。 可以使用控制台或 CLI --port 标志来覆盖此行为。 请参阅 在 Code Engine中使用应用程序。 |
不适用 | 作业或批处理作业 | 作业并行运行可执行代码的一个或多个实例。 与处理 HTTP 请求的应用程序不同,作业设计为运行一次并退出。 创建作业时,可以指定每次运行作业时使用的工作负载配置信息。 请参阅 使用作业和作业运行。 |
heroku create 和 git push heroku main 或 heroku container:push web |
app create |
创建应用程序的过程。 通过 Heroku,您可以创建一个应用程序,然后将代码推送到该应用程序。 您的代码是在该单个步骤中构建和部署的。 通过Code Engine,你可以从镜像仓库中提取容器镜像,从GitHub,等仓库中构建源代码,或从系统中的本地文件中提取代码,所有这些都只需一条命令即可完成。 您可以基于 Dockerfile 或使用 Paketo buildpack 构建代码。 您可以通过 CLI 中的单个步骤以及 Code Engine 控制台进行构建。 请参阅 规划构建。 |
定制域 | 定制域映射 | 这两种服务都允许您定义和管理工作负载的外部 URL。Code Engine 从控制台提供对 定制域映射 的支持。 您还可以通过 IBM Cloud Internet Services 或您选择的任何其他域提供程序来添加 定制域。 |
有关 Code Engine的更多术语和功能,请参阅 了解 Code Engine。
登录到 IBM Cloud。
执行以下步骤以登录到 IBM Cloud 帐户并以资源组为目标。
-
登录到 IBM Cloud CLI。
ibmcloud login
-
通过运行以下命令将资源组设定为目标。 要获取资源组列表,请运行
ibmcloud resource groups
。ibmcloud target -g <resource_group>
示例输出
Targeted resource group default
创建项目
Code Engine "项目" 将相关工作负载分组到逻辑集合中。 您可以根据对您有意义的任何条件 (例如,公司组织结构,工作负载之间的依赖关系或开发与测试与生产环境) 将工作负载分组到不同的项目中。 然后,可以 配置对这些项目的访问权。 请记住,单个项目中的工作负载共享专用网络,并在项目的安全边界内隔离。 项目中的所有工作负载都可以自由地相互交谈,而无需担心被集群外部的工作负载看到。 如果不同项目中的工作负载想要相互通信,那么通信必须使用因特网或内部 IBM 专用网络。 有关更多信息,请参阅 Code Engine 应用程序的可视性选项。
在 Code Engine 中创建名为 sample-proj
的项目。
ibmcloud ce project create --name sample-proj
示例输出
Creating project 'sample-proj'...
ID for project 'sample-proj' is 'abcdabcd-abcd-abcd-abcd-abcd12e3456f7'.
Waiting for project 'sample-proj' to be active...
Now selecting project 'sample-proj'.
OK
请注意,您的项目也已选择用于上下文,因此所有后续与应用程序相关的命令都在此新 sample-proj
项目的范围内。
部署应用程序
此样本应用程序从 样本 GitHub 存储库中提取代码。 此代码是使用 application create
命令将代码简单推送到 Code Engine。 您必须提供应用程序的名称和源代码的位置。 以下示例创建名为 myapp
的应用程序,该应用程序使用 buildpack
策略并提供当前目录 (.
) 中源代码的位置。
ibmcloud ce app create --name myapp --build-source https://github.com/IBM/heroku-to-code-engine
示例输出
Creating application 'myapp'...
Packaging files to upload from source path '.'...
Submitting build run 'myapp-run-220999-210706331'...
Creating image 'private.us.icr.io/ce--6ef04-khxrbwa0lci/app-myapp:220418-0207-askql'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myapp-run-220000-210706331' to check the build run status.
Waiting for application 'myapp' to become ready.
Configuration 'myapp' is waiting for a Revision to become ready.
Ingress has not yet been reconciled.
Waiting for load balancer to be ready.
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK
https://myapp.abcdbwa0lci.us-south.codeengine.appdomain.cloud
就这样 您现在具有面向因特网的应用程序。 应用程序本身中的代码与用于 Heroku 应用程序的代码相同,只是 Code Engine 命令略有不同。
让我们更深入地了解先前的 app create
命令。 请注意,app create
命令的输出提供了有关在创建和部署应用程序之前构建运行的进度的信息。
- Code Engine 接收到从源代码创建应用程序的请求 (而不是直接从映像中拉取)。
- Code Engine 检查与所选项目关联的 IAM 服务标识和 API 密钥。 此服务标识必须有权读写 IBM Cloud Container Registry。 如果不存在服务标识,那么 Code Engine 将为您创建一个服务标识。 请注意,此服务标识用于从同一项目运行的后续 Code Engine 构建请求。
- 此示例从公共 GitHub 存储库 (
--build-source https://github.com/IBM/heroku-to-code-engine
) 构建代码。源代码将打包到归档文件中,并上载到帐户中 IBM Cloud Container Registry 实例内的受管名称空间。 请注意,只能将 IBM Cloud Container Registry 作为本地构建的目标。 有关IBM Container Registry 的更多信息,包括有关配额限制和访问的信息,请参阅 开始使用IBM Cloud Container Registry。 - Code Engine 将源代码构建到映像中。 将在与源归档文件相同的名称空间中创建源映像。
- 构建完成后,将部署应用程序。 您可以从提供的 URL 访问应用程序。
通过 Code Engine,您会自动获得许多与 Heroku 相同的功能,例如自动缩放和蓝绿色推出更新,但您还会享受较新的功能 (例如,将应用程序缩小为零) 的好处,确保在应用程序未处于活动状态时不收取费用。
想要了解有关构建源代码的选项的更多信息? 请参阅 application create
和 job create
命令。
想要了解有关应用程序和作业的更多信息? 请参阅 在 Code Engine 和 使用作业和作业运行。
清除
完成本教程后,可以清除使用以下命令创建的资源。
删除应用程序
ibmcloud ce app delete --name myapp
删除应用程序时,还会删除关联的构建文件。
最后,删除构建从 IBM Cloud Container Registry创建的映像。
- 在 IBM Cloud 控制台中浏览至 注册表。
- 通过搜索应用程序名称来查找与应用程序关联的归档和映像。
- 选择归档和映像并删除。
视频文字记录
您好,我的名字是 JJ Asghar,我是 IBM Cloud的开发者代言人。 最近,您可能听说了 Heroku 在免费层上更改了他们的策略。 这给很多开发人员带来了挑战,因此我希望在这里花一些时间向您展示如何通过几个步骤从 Heroku 迁移到 Code Engine,从 IBM Cloud 迁移到代码引擎。 让我们开始使用它,看看您的系统的实际工作速度有多快。
所以首先,如果你没有看到这是来自 Heroku 的官方博客里面的实线,从 2022 年 11 月 28 日开始,我们计划停止免费-提供免费的产品计划,并计划关闭免费的 dynos 和数据服务。 我们将向受影响的用户发送一系列电子邮件通信。 这对于很多初学者初学者 Web 应用程序来说都是具有挑战性的。 我知道一个事实,我在刚开始的时候就使用了 Heroku,所以这对于很多人来说是一个相当大的打击,我想向大家展示一下从 Heroku 转换为 Code Engine有多容易。
首先,让我们看看我创建的一个不错的应用程序。 如果我继续在这里介绍我的应用程序,我们有一个不错的小烧瓶应用程序。 如果你不知道 python 是什么或者烧瓶是什么,它是 python 能够在标准端口上运行应用程序的一种格式。 假设我们有这个应用程序,它会显示 "Hello World!"。 我已经部署了它,我们可以在 heroku.com上查看我们令人惊叹的生产应用程序。 它说“你好世界”,我们要去改变它。 我们想要对其进行更新,因此我将继续操作,并将其快速更新为“Hello 从 Heroku 移动到 Code Engine”。
让我们一起来吧。 git add .
git commit -m “update hello line”
。 然后我将继续推送,就像您通常会将代码推送到 Heroku 一样。 我想向您展示这是 Code Engine内部完全相同的过程。 我们要做的是,我们将创建一个新的 ... 我们将首先登录到 IBM Cloud,然后从那里创建一个新的项目,然后继续进行部署,以确保它正常工作。
接下来,我们先将其部署到 Heroku,确保我们都有我们的工作代码,然后再重新加载,然后从 Heroku 迁移到 Code Engine,这样我们就知道我们的代码是有效的。 这太好了
现在,让我们将 Code Engine 作为其中的一部分,首先,我们需要 IBM Cloud 登录。 接下来,我将登录到 IBM Cloud。 如果您尚未设置 IBM Cloud 视频,或者如果您尚未设置 IBM Cloud 帐户,那么如果您查看以上内容,您应该会看到指向该视频的链接,我会将该链接放入视频中。
我先在这里复制我的名字,然后拿我的密码,登录就行了,这很好看,完美。 现在我要做的是 ibmcloud ce project create —name amazing product production app
。 所以这创造了我们美好的小 先确定目标。 我将获取缺省资源组,然后继续创建项目。 好了 应该只需要片刻-完美。 现在,您可以将自己的姓名更改为任意名称。 这对于您的项目来说只是一个包罗万象,这很有用。 然后我将执行下一个命令,即 ibmcloud ce app create —name pythonbackend — build-source . —strategy build packs
现在因为我已经有了 requirements.txt,这将是,这个应用程序足够聪明,搞清楚了," 嘿这是一个 python 应用程序! 所以我们先来建吧! ",这不错。 如你所见,它正在这里迈出第一步。 它正在运行构建,这很好。 它也为我们创造了一个美好的,私人的形象,这很有用。 这需要一些时间。 现在,我们看到,如果我们想要执行此操作而不需要等待,这就是 -nw
,我们实际上可以将其放入后台,等待其出现,然后通过此 build run get
实际名称进行检查。 既然我们要看这个直播,我们就会在这里做这件事。
完美! 现在,我开始打开这个 URL,它出现在这里,大家可以看到
“您好,从 Heroku 移动到 Code Engine”
就这样 我从 Heroku 拿了一模一样的代码 我创建了一个新的项目,然后我创建了一个应用程序,我刚刚推送了它,它可以想象你可以为自己做些什么。 这显示了 Code Engine 的功能,在免费层上,它真正是免费的-就像 Heroku 曾经是或将来不会是那样。 Code Engine 永远免费,这很棒,希望它会让您的生活轻松一些。
非常感谢您的观看,如果您有任何问题,我的 Twitter 句柄为 @jjasghar,或者您非常欢迎通过 awesome@ibm.com. 我的工作就是做一个可人的书呆子所以从不犹豫地伸出援助之手。
太感谢了
再见