ACM已进入下线状态,后续全部数据将被删除,请您尽快将ACM配置导入MSE Nacos中,专享注册配置中心性能稳定性更好,功能更丰富。本文介绍如何从ACM控制台导出配置,然后将配置导入MSE控制台完成迁移。
ACM停止支持后,您将无法在ACM控制台新建和编辑配置。您需要注意,ACM停止支持后,接口缺少SLA保障,因此建议您尽快完成配置迁移。
步骤一:将配置导出至MSE Nacos
使用阿里云账号登录MSE购买页,购买Nacos专业版。支持配置鉴权和加密,有更好的高可用保障。具体Nacos专业版CPU核数、内存数、机器数的选型,请参见微服务注册配置中心实例能力评估。购买公网带宽可以按照每秒变更频率(单位:次/s)*配置数*配置大小(单位:KB)进行单位换算来评估。
在ACM控制台导出需要迁移的配置。
登录ACM控制台。
在配置列表页面选择目标配置,在配置列表下方单击导出,然后在导出配置(public)对话框中单击导出。
存储导出的配置文件。
在MSE控制台导入配置。
登录MSE控制台。
在左侧导航栏,选择注册配置中心 > 实例列表。
在实例列表页面,单击之前购买的Nacos实例的实例ID。
在左侧导航栏,选择配置管理 > 配置列表。
在配置列表页面,单击导入配置。
在导入配置对话框选择相同配置的处理方式,然后单击上传文件,上传从ACM控制台导出的配置文件,最后单击确定导入。
步骤二:替换应用业务参数
请根据您的应用类型,选择相应的步骤替换应用业务参数:
迁移spring-cloud-alibaba应用
如果您的应用为spring-cloud-alibaba应用,修改应用程序的bootstrap.properties
配置文件。
将如下内容:
spring.cloud.nacos.config.endpoint=${ACM的公网/私网地址}
替换为:
spring.cloud.nacos.config.server-addr=${MSE的公网/私网地址}
并且在如下配置中,将Namespace替换为MSE中的Namespace:
spring.cloud.nacos.config.namespace=${MSE的namespaceID}
可运行的示例Demo,请参见acm2nacos-spring-cloud-example。
您可以通过以下方式鉴别您的应用是否为spring-cloud-alibaba应用:
在pom.xml
文件中如果发现如下内容,则表明您的应用为spring-cloud-alibaba应用。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
只有MSE Nacos 2.0.3以上版本才支持这种方式升级,如果您的MSE Nacos版本在2.0.2以下,请通过MSE控制台进行升级,升级过程大概需要5~6分钟,请您耐心等待。具体操作,请参见升级引擎版本。
为保障集群的高可用,请将集群节点设置为最少3个节点。
MSE Nacos实例的公网和私网地址可以在实例的基础信息页面获取。
MSE中默认命名空间(Namespace)为空,可以不填写。如果导入的命名空间ID不为空,可以在Nacos实例的命名空间页面获取。
如果您使用公网地址进行部署,为了保证连通性,您需要将客户端列入白名单。具体操作,请参见设置白名单。
如果白名单配置内容为空,表示本地所有地址均可访问该应用。
迁移Java应用
如果您使用的是ACM-Java-SDK,即您的依赖pom.xml中存在如下关键字:
<dependency> <groupId>com.alibaba.edas.acm</groupId> <artifactId>acm-sdk</artifactId> </dependency>
则可以直接在JVM运行参数中添加如下参数,并重新部署,即可完成迁移。
-DDIAMOND.SERVER.IPS=${MSE的公网/私网地址}
另外,请在代码中修改Namespace设置相关代码。
properties.put("namespace", "${namespaceId}");
如果您使用的是ACM客户端,希望变更为Nacos客户端,可参考如下关于Nacos-Java-SDK用户迁移的指导。
如果您使用的是Nacos-Java-SDK,即您的依赖pom.xml中存在如下关键字:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
则可以将如下代码中的${}
内容替换成MSE的注册地址,将${namespaceId}
替换为MSE的命名空间ID(如果您使用的是默认命名空间,则该处内容置空即可),然后重新部署。
properties.put("serverAddr", ${MSE的公网/私网地址});
properties.put("namespace", "${namespaceId}");
在启动时增加如下参数,即可完成迁移。
-Dnacos.cache.data.init.snapshot=false
nacos-sdk迁移示例Demo,请参见acm2nacos-java-example;Java官方应用示例Demo,请参见Java SDK。
迁移nacos-spring-boot应用
如果您的应用是nacos-spring-boot应用,修改应用程序的application.properties
配置文件。
将如下内容:
nacos.config.endpoint=${ACM的公网/私网地址}
替换为:
nacos.config.server-addr=${MSE的公网/私网地址}
并且在如下配置中,将Namespace替换为MSE中的Namespace:
nacos.config.namespace=${MSE的namespaceID}
迁移Golang应用
调用接口前,需配置环境变量,通过环境变量读取访问凭证。微服务引擎的AccessKey ID和AccessKey Secret的环境变量名为MSE_AK、MSE_SK。
如果您使用的是ACM-golang-SDK,则需要将
${endpoint}
替换为MSE的注册地址。clientConfig := constant.ClientConfig{ Endpoint: ${endpoint} + ":8080", NamespaceId: namespaceId, AccessKey: MSE_AK, SecretKey: MSE_SK, TimeoutMs: 5 * 1000, ListenInterval: 30 * 1000, }
如果您使用的是Nacos-golang-SDK,则需要将
${serverAddr}
替换为MSE的注册地址。sc := []constant.ServerConfig{ { IpAddr: "${serverAddr}", Port: 8848, }, }
Golang官方应用示例Demo,请参见nacos-sdk-go。
迁移Python应用
如果您使用的是ACM-Python-SDK,则需要将
${endpoint}
和${namespace_id}
替换为MSE的注册地址和命名空间ID。ENDPOINT = "${endpoint}" NAMESPACE = "${namespace_id}" c = acm.ACMClient(ENDPOINT, NAMESPACE, AK, SK)
如果您使用的是Nacos-Python-SDK,则需要将
${server_address}
和${namespace_id}
替换为MSE的注册地址和命名空间ID。SERVER_ADDRESSES = "${server_address}" NAMESPACE = "${namespace_id}" client = nacos.NacosClient(SERVER_ADDRESSES, namespace=NAMESPACE)
迁移Node.js应用
如果您使用的是ACM-Nodejs-SDK,则需要将
${endpoint}
和${namespace_id}
替换为MSE的注册地址和命名空间ID。// for find address mode const configClient = new NacosConfigClient({ endpoint: '${endpoint}', namespace: '${namespace_id}', accessKey: 'MSE_AK', secretKey: 'MSE_SK', requestTimeout: 6000, });
如果您使用的是Nacos-Nodejs-SDK,则需要将
${server_address}
和${namespace_id}
替换为MSE的注册地址和命名空间ID。const configClient = new NacosConfigClient({ serverAddr: '${server_address}', namespace: '${namespace_id}', accessKey: 'MSE_AK', secretKey: 'MSE_SK', requestTimeout: 6000, });
迁移C#应用
请将${server_address}
和${namespace_id}
替换为MSE的注册地址。
{
"NacosConfig": {
"Listeners": [
{
"Optional": false,
"DataId": "common",
"Group": "DEFAULT_GROUP"
},
{
"Optional": false,
"DataId": "demo",
"Group": "DEFAULT_GROUP"
}
],
"Namespace": "namespace_id", // Please set the value of Namespace ID.
"ServerAddresses": [ "http://${server_address}:8848/" ],
"UserName": "test2",
"Password": "123456",
"AccessKey": "MSE_AK",
"SecretKey": "MSE_SK",
"EndPoint": "acm.aliyun.com",
"ConfigFilterAssemblies": ["YouPrefix.AssemblyName"],
"ConfigFilterExtInfo": "some ext information"
}
}
迁移C++应用
如果您使用的是ACM-CPP-SDK,则需要将
${endpoint}
和${namespace_id}
替换为MSE的注册地址和命名空间ID。// Initialize configuration service and the console will retrieve the following parameters through the sample code. ACM::init("${endpoint}","$namespace_id","$accessKey","$secretKey");
如果您使用的是Nacos-CPP-SDK,则需要将
${server_address}
替换为MSE的注册地址。Properties props; props[PropertyKeyConst::SERVER_ADDR] = "${server_address}:8848";//Server address
(可选)步骤三:重新给RAM用户授权
如果您使用了配置鉴权功能,并对指定的RAM用户进行了授权,那么在应用迁移至MSE之后,进行鉴权脚本的替换,重新对RAM用户进行新的授权。MSE的鉴权脚本配置示例,请参见注册配置中心授权。
登录RAM控制台。
在左侧导航栏,选择权限管理 > 权限策略。
在权限策略页面左上角,单击创建权限策略。
在创建权限策略页面,单击脚本编辑页签。
在本地复制脚本,并进行替换。
示例脚本如下:
{ "Version": "1", "Statement": [ { "Action": [ "acms:R" ], "Resource": "*:*:*:*:cfg/1ca01ca0-11b0-1e01-0df1-d1010101bc10/DEFAULT_GROUP/com.alibaba.acm.test", "Effect": "Allow" } ] }
替换读权限
如果其中包含如下内容:
"Action": [ "acms:R" ]
替换为:
"Action": [ "mse:List*", "mse:Query*", "mse:Get*" ]
替换写权限
如果其中包含如下内容:
"Action": [ "acms:W" ]
替换为:
"Action": [ "mse:Create*", "mse:Update*", "mse:Delete*" ]
替换资源
请将如下内容:
"Resource": "*:*:*:*:cfg/{acm_namespace_id}/{group_id}/{data_id}"
替换为:
"Resource": "acs:mse:*:*:instance/{instance_id}/{mse_namespace_id}/{group_id}/{data_id}"
说明参数说明如下:
{acm_namespace_id}
:ACM产品的命名空间ID。{instance_id}
:MSE中的实例ID。{mse_namespace_id}
:MSE产品的命名空间ID。{group_id}
:组ID。{data_id}
:Data ID。
如果您不需要精确到group_id
级别或者data_id
级别的鉴权,可以将其删除。
如果您只需要精确到
namespace
级别的鉴权,请替换为:"Resource": "acs:mse:*:*:instance/{instance_id}/{mse_namespace_id}"
如果您只需要精确到
group_id
级别的鉴权,请替换为:"Resource": "acs:mse:*:*:instance/{instance_id}/{mse_namespace_id}/{group_id}"
替换完成之后,对RAM用户重新授权该脚本相应的权限。具体操作,请参见注册配置中心授权。
重新授权大约5~10s后,MSE的RAM用户权限生效。
步骤四:重新部署并启动应用
请将您的业务重新部署。部署成功之后,即完成了整个迁移流程。