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使用者進行新的授權。註冊配置中心授權
登入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使用者權限生效。
步驟四:重新部署並啟動應用
請將您的業務重新部署。部署成功之後,即完成了整個遷移流程。