本指南演示了以下 Azure .NET API 的用法,包括设置认证、创建并使用 Azure 存储、创建并使用 Azure SQL 数据库、部署虚拟机、从 GitHub 部署 Azure Web 应用。在本教程中完成的所有操作均符合1元试用条件。

开始之前

如果您还没有 Azure 账户,可以申请1元试用账户。
安装 Azure PowerShell

设置认证

为了使用 Azure .NET Management Libraires ,您创建的应用程序需要权限来读取和创建 Azure 订阅中的资源。我们首先需要为应用程序创建一个 service principal , service principal 可以通过非交互方式授予应用程序所需的权限 。1. 以下 PoweShell 命令登陆中国区 Azure:
    

Login-AzureRmAccount -EnvironmentName AzureChinaClou

  

注意记录 TenandId 和 SubscriptionId,在后续步骤中需要用到。

2. 以下命令创建 service principal:

# Create the service principal (use a strong password)
$sp = New-AzureRmADServicePrincipal -DisplayName "AzureDotNetTest" -Password "password"
# Give it the permissions it needs...
New-AzureRmRoleAssignment -ServicePrincipalName $sp.ApplicationId -RoleDefinitionName Contributor
# Display the Application ID, because we'll need it later.
$sp | Select DisplayName, ApplicationId

注意记录 ApplicationId。

3. 一个名为 Azureauth.properties 的 txt 文件,输入以下内容:

# sample management library properties file
subscription=dd9eebf5-eae4-4d04-a371-29ba614032e8
client=67699411-1af6-4341-a47e-5d4cf0b62484
key=P@ssword1
tenant=dd8210ad-5216-499c-ab57-6d297fc0e5d2
managementURI=https://management.core.chinacloudapi.cn/
baseURL=https://management.chinacloudapi.cn/
authURL=https://login.chinacloudapi.cn/
graphURL=https://graph.chinacloudapi.cn/

• subscription:1中记录的 SubscriptionId
 • client:2中记录的 ApplicationId
 • key:2中的 -Password 参数值
 • tenant:1中记录的 TenantId

4. 保存 Azureauth.properties,运行以下命令将 Azureauth.properties 的存放路径设置为环境变量 AZURE_AUTH_LOCATION。
  [Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\src\azureauth.properties.txt", "User")

设置 Visual Studio 连接到中国区 Azure

根据您使用的 Visual Studio 版本,请参考中国区 Azure 应用程序开发说明中的设置开发计算机,本教程使用的是 Visual Studio 2017 community 版本。
步骤3:创建新的 console 应用程序。
打开 Visual Studio, “File”->”New”->”Project”,选择 Console App (.NET Core)。

创建完成后,打开 Package Manager Console,运行以下命令安装 Azure .NET Management Libraries:

# Azure Management Libraries for .NET (Fluent)
Install-Package Microsoft.Azure.Management.Fluent
# Azure Store client libraries
Install-Package WindowsAzure.Storage
# SQL Database client libraries
Install-Package System.Data.SqlClient

创建虚拟机

打开 Program.cs 文件,添加以下命名空间:

using System;
using System.Linq;
using Microsoft.Azure.Management.Compute.Fluent;
using Microsoft.Azure.Management.Compute.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Data.SqlClient;

以下示例将在您的 Azure 订阅中创建一台 Windows 虚拟机,该虚拟机运行在“中国北部”,虚拟机类型为 StandardD2V2,系统为 WindowsServer2012R2Datacenter。
将 Main 方法替换为以下代码,请将 username 和 password 变量替换成您的值:

static void Main(string[] args)
{
// Set some variables...
string username = "vmuser1";
string password = "Password0123!";
string rgName = "sampleResourceGroup";
string windowsVmName = "sampleWindowsVM";
string publicIpDnsLabel = "samplePublicIP";
// Authenticate
var credentials = SdkContext.AzureCredentialsFactory
.FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));
var azure = Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(credentials)
.WithDefaultSubscription();
// Create the VM
Console.WriteLine("Creating VM...");
var windowsVM = azure.VirtualMachines.Define(windowsVmName)
.WithRegion(Region.ChinaEast)
.WithNewResourceGroup(rgName)
.WithNewPrimaryNetwork("10.0.0.0/28")
.WithPrimaryPrivateIPAddressDynamic()
.WithNewPrimaryPublicIPAddress(publicIpDnsLabel)
.WithPopularWindowsImage(KnownWindowsVirtualMachineImage.WindowsServer2012R2Datacenter)
.WithAdminUsername(username)
.WithAdminPassword(password)
.WithSize(VirtualMachineSizeTypes.StandardD2V2)
.Create();
// Wait for the user
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
}

按 F5 运行程序。几分钟后,当看到“Press enter to continue...”时,说明虚拟机已经创建完毕,您可以运行以下 PowerShell 命令来确认虚拟机是否创建成功:

Get-AzureRmVm -ResourceGroupName sampleResourceGroup 

或者在 Azure 门户中查看:

从 GitHub 仓库部署 Azure Web 应用

现在我们将修改代码来实现从 GitHub 仓库部署 Web 应用程序。将 Main 方法替换为以下代码:

static void Main(string[] args)
{
// Set some variables...
string rgName = "sampleWebAppGroup";
string appName = SdkContext.RandomResourceName("WebApp", 20);
// Authenticate
var credentials = SdkContext.AzureCredentialsFactory
.FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));
var azure = Azure
.Configure()
.Authenticate(credentials)
.WithDefaultSubscription();
// Create the web app
Console.WriteLine("Creating Web App...");
var app = azure.WebApps.Define(appName)
.WithRegion(Region.ChinaNorth)
.WithNewResourceGroup(rgName)
.WithNewFreeAppServicePlan()
.DefineSourceControl()
.WithPublicGitRepository("https://github.com/Azure-Samples/app-service-web-dotnet-get-started")
.WithBranch("master")
.Attach()
.Create();
Console.WriteLine("Your web app is live at: https://{0}", app.HostNames.First());
// Wait for the user
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
}

按 F5 运行程序,完成后返回如下结果。

访问 https://webapp0513224523a.chinacloudsites.cn 就能看到部署在 Azure web 应用中的.NET 程序啦。

连接到 Azure SQL 数据库

下面我们将演示如何创建 Azure SQL 数据库,连接到数据库创建表并插入值。将 Main 方法替换为以下代码:

static void Main(string[] args)
{
// Set some variables...
string rgName = "sampleSQLDBGroup";
string adminUser = SdkContext.RandomResourceName("db", 8);
string sqlServerName = SdkContext.RandomResourceName("sql", 10);
string sqlDbName = SdkContext.RandomResourceName("dbname", 8);
string dbPassword = "P@ssword01!";
// Authenticate
var credentials = SdkContext.AzureCredentialsFactory
.FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));
var azure = Azure
.Configure()
.Authenticate(credentials)
.WithDefaultSubscription();
// Create the SQL server and database
Console.WriteLine("Creating server...");
var sqlServer = azure.SqlServers.Define(sqlServerName)
.WithRegion(Region.ChinaNorth)
.WithNewResourceGroup(rgName)
.WithAdministratorLogin(adminUser)
.WithAdministratorPassword(dbPassword)
.WithNewFirewallRule("0.0.0.0", "255.255.255.255")
.Create();
Console.WriteLine("Creating database...");
var sqlDb = sqlServer.Databases.Define(sqlDbName).Create();
// Display information for connecting later...
Console.WriteLine("Created database {0} in server {1}.", sqlDbName, sqlServer.FullyQualifiedDomainName);
Console.WriteLine("Your user name is {0}.", adminUser + "@" + sqlServer.Name);
// Build the connection string
var builder = new SqlConnectionStringBuilder();
builder.DataSource = sqlServer.FullyQualifiedDomainName;
builder.InitialCatalog = sqlDbName;
builder.UserID = adminUser + "@" + sqlServer.Name; // Format user ID as "user@server"
builder.Password = dbPassword;
builder.Encrypt = true;
builder.TrustServerCertificate = true;
// connect to the database, create a table and insert an entry into it
using (var conn = new SqlConnection(builder.ConnectionString))
{
conn.Open();
Console.WriteLine("Populating database...");
var createCommand = new SqlCommand("CREATE TABLE CLOUD (name varchar(255), code int);", conn);
createCommand.ExecuteNonQuery();
var insertCommand = new SqlCommand("INSERT INTO CLOUD (name, code ) VALUES ('Azure', 1);", conn);
insertCommand.ExecuteNonQuery();
Console.WriteLine("Reading from database...");
var selectCommand = new SqlCommand("SELECT * FROM CLOUD", conn);
var results = selectCommand.ExecuteReader();
while (results.Read())
{
Console.WriteLine("Name: {0} Code: {1}", results[0], results[1]);
}
}
// Wait for the user
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
}

按 F5 运行程序,运行完成后我们通过 SQL Server Management Studio 来验证:

打开 SSMS,根据上面程序的输出结果,ServerName 为 sql646624.database.chinacloudapi.cn,用户名为:db51559@sql64662, 密码为代码中定义的变量 dbPassword 的值 P@ssword01!,使用 SQL Server Authenticaiton 方式登录:

可以看到我们在 Azure SQL 数据库中创建了一张名为 dbo.CLOUD 的表,并插入了一条数据。

将文件上传到 Azure Storage

下面我们将演示如何在 Azure 中创建存储账户并将文件上传到 Blob 存储。将 Main 方法替换为以下代码:
static void Main(string[] args)

{
// Set some variables...
string rgName = "sampleStorageGroup";
string storageAccountName = SdkContext.RandomResourceName("st", 10);
// Authenticate
var credentials = SdkContext.AzureCredentialsFactory
.FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));
var azure = Azure
.Configure()
.Authenticate(credentials)
.WithDefaultSubscription();
// Create the storage account
Console.WriteLine("Creating storage account...");
var storage = azure.StorageAccounts.Define(storageAccountName)
.WithRegion(Region.ChinaNorth)
.WithNewResourceGroup(rgName)
.Create();
var storageKeys = storage.GetKeys();
string storageConnectionString = "DefaultEndpointsProtocol=https;"
+ "AccountName=" + storage.Name
+ ";AccountKey=" + storageKeys[0].Value
+ ";EndpointSuffix=core.chinacloudapi.cn";
var account = CloudStorageAccount.Parse(storageConnectionString);
var serviceClient = account.CreateCloudBlobClient();
// Create container. Name must be lower case.
Console.WriteLine("Creating container...");
var container = serviceClient.GetContainerReference("helloazure");
container.CreateIfNotExistsAsync().Wait();
// Make the container public
var containerPermissions = new BlobContainerPermissions()
{ PublicAccess = BlobContainerPublicAccessType.Container };
container.SetPermissionsAsync(containerPermissions).Wait();
// write a blob to the container
Console.WriteLine("Uploading blob...");
var blob = container.GetBlockBlobReference("helloazure.txt");
blob.UploadTextAsync("Hello, Azure!").Wait();
Console.WriteLine("Your blob is located at {0}", blob.StorageUri.PrimaryUri);
// Wait for the user
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
}

按 F5 运行程序,运行完成后。我们打开 Azure 门户,来验证文件是否已经上传到 Azure 存储中。

从 Azure 门户中我们可以看到文件已经上传到 Azure 存储中了。

至此,您已经学会了如何使用 Azure .NET Management Libraries 来创建并管理一些重要的 Azure 资源啦!

后续步骤
更多 Azure .NET 示例:
虚拟机
Web 应用
SQL 数据库

更多精彩干货 请点击查看

欢迎有兴趣的朋友多多交流
A究院研究生 Azurecommunity@qq.com

Azure .NET Libraries 入门的更多相关文章

  1. Azure Java Libraries 入门

    本指南演示了以下 Azure Java Libraries 的用法,包括设置认证.创建并使用 Azure 存储.创建并使用 Azure SQL 数据库.部署虚拟机.从 GitHub 部署 Azure ...

  2. Azure Management API 之 利用 Windows Azure Management Libraries 来控制Azure platform

    在此之前,我曾经发过一篇文章讲叙了如何利用Azure power shell team 提供的class library. 而就在这篇文章发布之后不久,我又发现微软发布了一个preview 版本的Wi ...

  3. Azure DevOps Server 入门实践与安装部署

    一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...

  4. Azure CLI 简单入门

    Azure CLI 是什么 Azure 命令行接口 (CLI) 是用于管理 Azure 资源的 Microsoft 跨平台命令行体验. Azure CLI 易于学习,是构建适用于 Azure 资源的自 ...

  5. Azure Logic App 入门(一)

    一,引言 前两天看一个azure相关的题,接触到一个叫 “Azure Logic App” 的服务,刚好,今天抽空学习以下,顺便结合它做一篇入门的分析文章. 首先,我们得对它有个大概的认识,了解以下A ...

  6. Azure Automation (1) 入门

    <Windows Azure Platform 系列文章目录> 通过Azure Automation(自动化),开发人员可以自动完成通常要在云环境中执行的手动.长时间进行.易出错且重复性高 ...

  7. Azure VMSS (1) 入门

    <Windows Azure Platform 系列文章目录> 在使用云计算服务的时候,我们经常需要有自动横向扩展的功能.比如: 1.在业务高峰期,根据负载的增加,自动打开若干台VM 2. ...

  8. Azure EventHub快速入门和使用心得

    Azure Event Hubs(事件中心)是一个大数据流式数据摄取服务平台,每秒接受数百万事件; EventHubs 是一个有数据保留期限的缓冲区,类似分布式日志:可缩放的关键在于[分区消费模型], ...

  9. Azure Kubernetes Service 入门

    一,引言 上一节,我们使用Azure CLI 创建了Azure Resource Group 和 Azure Container Registry 资源,并且将本地的一个叫 “k8s.net.demo ...

随机推荐

  1. Android中线程和线程池

    我们知道线程是CPU调度的最小单位.在Android中主线程是不能够做耗时操作的,子线程是不能够更新UI的.在Android中,除了Thread外,扮演线程的角色有很多,如AsyncTask,Inte ...

  2. Struts2、SpringMVC、Servlet(Jsp)性能对比 测试

    Struts2.SpringMVC.Servlet(Jsp)性能对比 测试 . Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它. 做为一个程序员,对于各个框架的性能要 ...

  3. JMeterPlugin性能监控

    GUI界面中的plugins manager中的jpgc-Standard set,其中共包含以下的文件: jpgc-dummy jpgc-fifo jpgc-graphs-basic jpgc-pe ...

  4. 终于搞定在VS2010中将CString转换为const char*

    最近碰到了CString 转 const char *的问题. 以前只要简单的一个强制转换就OK了,可现在是不行了,搜索了很多资料,终于搞定,主要是Unicode和ANSI的问题,只要做一个转换就可以 ...

  5. 通过API方式查看Azure Sign-ins记录

    经确认,目前Sign-ins功能在中国区还没有开通.也没有相关的预计开通时间.您可以通过如下链接随时关注China Azure的最新公告:https://www.azure.cn/zh-cn/what ...

  6. java中的jdk配置详解:

    1.配值系统变量"JAVA_HOME" 变量名JAVA_HOME: 指向:JDK(java开发工具包)的安装路径 目的:使用JDK安装目录时,可以直接通过”%JAVA_HOME%“ ...

  7. 河内塔问题(C++版)

    上次,我们讲了汉诺塔,今天我们来讲一讲和汉诺塔类似的题目<河内塔问题> 题目描述 Description 一位法国数学家曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里 ...

  8. C#-WebForm-★★★JQuery知识——DOM操作★★★

    例如: $("#btn1").attr( "disabled" , "disabled" ); 例如: $("#d1") ...

  9. mfix中统计气泡体积

    先转换为point data 提取空隙率在0.45-1.0之间的网格,为后面提取气泡内网格做准备 把free board部分去掉 然后积分 选择cell data后就得到气泡内所有网格的体积和,如果网 ...

  10. RestTemplate--解决中文乱码

    [原文链接]:https://www.tecchen.xyz/rest-template-messycode.html 我的个人博客:https://www.tecchen.xyz 在开发扇贝-每日一 ...