我们如何确保连接资源具有唯一的名称?
我们大约有100个逻辑应用程序,这些应用程序与sftp和blob存储等连接。一个例子是:
"azureblob_1_Connection_Name": {
"value": "azureblob-1"
},
"azureblob_1_Connection_DisplayName": {
"value": "my-blob-con"
},
"azureblob_1_accountName": {
"value": "blobdocumentstor"
}
由于缺乏自动化,另一个逻辑应用程序可能使用相同的连接名称:azureblob-1
,但是它可能具有不同的属性,例如accountName
可能有所不同:
"azureblob_1_accountName": {
"value": "differentdocstor"
}
以相同的连接名称部署逻辑应用程序时,它将替换现有的连接!
我们如何确保连接不会被覆盖?
是否可以在手臂模板中强制某个值将是唯一的?
答案 0 :(得分:2)
您可以使用诸如开始部署时间臂模板之类的方法,并将其传递到模板中,并基于此生成唯一的名称。所有手臂模板功能都是确定性的,因此,如果传递相同的输入,则始终获得相同的输出。日期\时间功能尚未实现(afaik)。在此之前,您需要依靠外部源来生成名称\前缀\一些内容,以供arm模板生成唯一的名称。
但这会导致一个问题,即除非您知道第一次运行时提供的“种子”,否则就无法更新现有的东西。
另一种强制执行方式-为每个部署使用单独的资源组,我知道它不是最佳选择,但可以正常工作(不确定逻辑应用程序连接tbh,它们在全球范围内是唯一的吗?如果它们不起作用)
您可能会创建一个模板,该模板对现有资源进行过滤(某种形式),但不会变得直截了当(它确实很笨拙,更容易在其他地方实现此逻辑)。
答案 1 :(得分:1)
在资源名称中使用一些前缀,并在arm模板中使用class AgeDescriptor:
def __init__(self):
self._age = 0
def __set__(self, instance, value):
print('setter')
self._age = value
def __get__(self, instance, owner):
print('getter')
return self._age
class Person:
age = AgeDescriptor()
def __init__(self, name, age):
self.name = name
self.age = age
def get_age(self):
return self.age
def set_age(self, value):
self.age = value
if __name__ == "__main__":
e1 = Person("ankit", 29)
函数以生成唯一名称。
示例:
uniqueString
将自动生成上述资源的默认值。您还可以编写自定义逻辑以生成唯一的字符串,然后将其从PowerShell / .NET传递到部署模板的任何位置。