【问题标题】:Calling ARM Template from C#从 C# 调用 ARM 模板
【发布时间】:2021-05-05 04:10:49
【问题描述】:

我正在处理一个需求,我想从代码传递参数(如资源名称、资源位置等)动态调用 ARM 模板,

我能够创建 ARM 模板。例如,为存储帐户创建了 ARM 模板,我有参数文件,其中包含要传递给模板的值。但是,我想从 c# 代码动态传递这些值并在 Azure 中预配资源。
在 Power shell 中,我可以实现这一点,但我希望在 c# 中也能做到这一点。

我可以探索的任何建议/技术链接。

【问题讨论】:

    标签: c# azure azure-resource-manager


    【解决方案1】:

    我使用以下函数使用 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; }
        }
    

    【讨论】:

      【解决方案2】:

      我认为 Microsoft.Azure.Management.Fluent 可以解决您的问题。

      如果您查看 Microsoft 文档 "Deploy an Azure Virtual Machine using C# and a Resource Manager template",它会引导您使用 C# 中的模板文件部署 VM。该文档可用作将任何 ARM 模板部署到 Azure 的起点。

      【讨论】:

      • 感谢 Joseph 的输入,我在 parameters.json 文件中有个小问题 "parameters": { "adminUserName": { "value": "azureuser" }, "adminPassword": { " value": "Azure12345678" } } azureuser 和 Azure12345678 这些是我想在运行时传递的值,我的意思是在 UI 中最终用户将提供。那么我如何传递这些值。谢谢,
      • @soundarya9 您可以使用“WithTemplate”直接将 Json 传递给它,而不是路径 docs.microsoft.com/en-us/dotnet/api/…
      猜你喜欢
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2015-09-22
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多