从 C# 调用 ARM 模板
Calling ARM Template from C#
我正在处理一个要求,我想从代码传递参数(如资源名称、资源位置等)动态调用 ARM 模板,
我可以创建 ARM 模板。例如,为存储帐户创建了 ARM 模板,并且我有包含要传递给模板的值的参数文件。但是我想从 c# 代码动态传递这些值并在 Azure 中配置资源。
从 Power shell 我能够实现这一点,但我希望从 c# 中完成同样的事情。
我可以探索的任何 suggestions/technical 个链接。
我认为 Microsoft.Azure.Management.Fluent 可以解决您的问题。
如果您查看 Microsoft 文档 "Deploy an Azure Virtual Machine using C# and a Resource Manager template",它会引导您使用来自 C# 的模板文件部署 VM。该文档可用作将任何 ARM 模板部署到 Azure 的起点。
我使用以下函数使用 c# 部署 ARM 模板
private async Task DeployTemplate(string resourceGroupName, string deploymentName, JObject templateFileContents, JObject parameters)
{
var deployment = new Deployment
{
Properties = new DeploymentProperties
{
Mode = DeploymentMode.Incremental,
Template = templateFileContents,
Parameters = parameters
}
};
var serviceCredentials = await ApplicationTokenProvider.LoginSilentAsync(_tenantId, _clientId, _clientSecret);
var resourceManagementClient = new ResourceManagementClient(serviceCredentials)
{
SubscriptionId = _subscriptionId
};
await resourceManagementClient.Deployments.CreateOrUpdateAsync(resourceGroupName, deploymentName, deployment);
}
templateFileContents 由这个函数填充:
private static JObject GetJsonFileContents(string pathToJson)
{
var path = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), pathToJson);
using (var file = File.OpenText(path))
{
using (var reader = new JsonTextReader(file))
{
return (JObject)JToken.ReadFrom(reader);
}
}
}
这是我创建动态参数对象的方式:
var parameters = JObject.FromObject(
new DbCloneArmParameters
{
databaseName = new ArmParameterValue { Value = databaseName },
serverName = new ArmParameterValue { Value = servername },
location = new ArmParameterValue { Value = "westeurope" } }
});
助手类:
public class DbCloneArmParameters
{
public ArmParameterValue databaseName { get; set; }
public ArmParameterValue serverName { get; set; }
public ArmParameterValue location { get; set; }
}
public class ArmParameterValue
{
public string Value { get; set; }
}
我正在处理一个要求,我想从代码传递参数(如资源名称、资源位置等)动态调用 ARM 模板,
我可以创建 ARM 模板。例如,为存储帐户创建了 ARM 模板,并且我有包含要传递给模板的值的参数文件。但是我想从 c# 代码动态传递这些值并在 Azure 中配置资源。
从 Power shell 我能够实现这一点,但我希望从 c# 中完成同样的事情。
我可以探索的任何 suggestions/technical 个链接。
我认为 Microsoft.Azure.Management.Fluent 可以解决您的问题。
如果您查看 Microsoft 文档 "Deploy an Azure Virtual Machine using C# and a Resource Manager template",它会引导您使用来自 C# 的模板文件部署 VM。该文档可用作将任何 ARM 模板部署到 Azure 的起点。
我使用以下函数使用 c# 部署 ARM 模板
private async Task DeployTemplate(string resourceGroupName, string deploymentName, JObject templateFileContents, JObject parameters)
{
var deployment = new Deployment
{
Properties = new DeploymentProperties
{
Mode = DeploymentMode.Incremental,
Template = templateFileContents,
Parameters = parameters
}
};
var serviceCredentials = await ApplicationTokenProvider.LoginSilentAsync(_tenantId, _clientId, _clientSecret);
var resourceManagementClient = new ResourceManagementClient(serviceCredentials)
{
SubscriptionId = _subscriptionId
};
await resourceManagementClient.Deployments.CreateOrUpdateAsync(resourceGroupName, deploymentName, deployment);
}
templateFileContents 由这个函数填充:
private static JObject GetJsonFileContents(string pathToJson)
{
var path = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), pathToJson);
using (var file = File.OpenText(path))
{
using (var reader = new JsonTextReader(file))
{
return (JObject)JToken.ReadFrom(reader);
}
}
}
这是我创建动态参数对象的方式:
var parameters = JObject.FromObject(
new DbCloneArmParameters
{
databaseName = new ArmParameterValue { Value = databaseName },
serverName = new ArmParameterValue { Value = servername },
location = new ArmParameterValue { Value = "westeurope" } }
});
助手类:
public class DbCloneArmParameters
{
public ArmParameterValue databaseName { get; set; }
public ArmParameterValue serverName { get; set; }
public ArmParameterValue location { get; set; }
}
public class ArmParameterValue
{
public string Value { get; set; }
}