Azure .NET Libraries 入门
本指南演示了以下 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 入门的更多相关文章
- Azure Java Libraries 入门
本指南演示了以下 Azure Java Libraries 的用法,包括设置认证.创建并使用 Azure 存储.创建并使用 Azure SQL 数据库.部署虚拟机.从 GitHub 部署 Azure ...
- Azure Management API 之 利用 Windows Azure Management Libraries 来控制Azure platform
在此之前,我曾经发过一篇文章讲叙了如何利用Azure power shell team 提供的class library. 而就在这篇文章发布之后不久,我又发现微软发布了一个preview 版本的Wi ...
- Azure DevOps Server 入门实践与安装部署
一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...
- Azure CLI 简单入门
Azure CLI 是什么 Azure 命令行接口 (CLI) 是用于管理 Azure 资源的 Microsoft 跨平台命令行体验. Azure CLI 易于学习,是构建适用于 Azure 资源的自 ...
- Azure Logic App 入门(一)
一,引言 前两天看一个azure相关的题,接触到一个叫 “Azure Logic App” 的服务,刚好,今天抽空学习以下,顺便结合它做一篇入门的分析文章. 首先,我们得对它有个大概的认识,了解以下A ...
- Azure Automation (1) 入门
<Windows Azure Platform 系列文章目录> 通过Azure Automation(自动化),开发人员可以自动完成通常要在云环境中执行的手动.长时间进行.易出错且重复性高 ...
- Azure VMSS (1) 入门
<Windows Azure Platform 系列文章目录> 在使用云计算服务的时候,我们经常需要有自动横向扩展的功能.比如: 1.在业务高峰期,根据负载的增加,自动打开若干台VM 2. ...
- Azure EventHub快速入门和使用心得
Azure Event Hubs(事件中心)是一个大数据流式数据摄取服务平台,每秒接受数百万事件; EventHubs 是一个有数据保留期限的缓冲区,类似分布式日志:可缩放的关键在于[分区消费模型], ...
- Azure Kubernetes Service 入门
一,引言 上一节,我们使用Azure CLI 创建了Azure Resource Group 和 Azure Container Registry 资源,并且将本地的一个叫 “k8s.net.demo ...
随机推荐
- ceph: health_warn clock skew detected on mon的解决办法
造成集群状态health_warn:clock skew detected on mon节点的原因有两个,一个是mon节点上ntp服务器未启动,另一个是ceph设置的mon的时间偏差阈值比较小. 排查 ...
- 激活IDEA,pycharm方法
1.修改hosts文件将0.0.0.0 account.jetbrains.com添加到hosts文件最后,注意hosts文件无后缀,如果遇到无法修改或权限问题,可以采用覆盖的方法去替换hosts文件 ...
- java学习笔记—标准连接池的实现(27)
javax.sql.DataSource. Java.sql.* DataSource 接口由驱动程序供应商实现.共有三种类型的实现: 基本实现 - 生成标准的 Connection 对象 – 一个D ...
- 深入了解java虚拟机(JVM) 第九章 class文件结构及意义
Class文件是访问jvm的重要指令,学习了class文件能够更加深入的了解jvm的工作过程.本文只进行概况总结,要进行更加详细的学习class文件,可以参考:https://blog.csdn.ne ...
- 利用CXF生成webservice客户端代码
一.CXF环境的配置 1.下载CXF的zip包. 2.解压.例如:D:\ITSoft\webserviceClientUtils\cxf\apache-cxf-2.7.17 3.配置环境变量:新建变量 ...
- [Swift实际操作]七、常见概念-(12)使用DispatchGroup(调度组)管理线程数组
本文将为你演示调度组的使用,使用调度组可以将多个线程中的人物进行组合管理,可以设置当多个相同层次的任务完成之后,再执行另一项任务. 首先导入需要使用的界面工具框架 import UIKit 在控制台输 ...
- Laravel 完整开源项目大全
来自 Laravel学院:http://laravelacademy.org/ http://laravelacademy.org/laravel-project 原型项目 Laravel 5 Boi ...
- 总结day13 ----内置函数
内置函数 我们一起来看看python里的内置函数.什么是内置函数?就是Python给你提供的,拿来直接用的函数,比如print,input等等.截止到python版本3.6.2,现在python一共为 ...
- C语言数据结构之二叉树的实现
本篇博文是博主在学习C语言算法与数据结构的一些应用代码实例,给出了以二叉链表的形式实现二叉树的相关操作.如创建,遍历(先序,中序后序遍历),求树的深度,树的叶子节点数,左右兄弟,父节点. 代码清单如下 ...
- axiso 生产环境跨域配置(可用)
1.npm install axios 后 在main.js中import import Axios from 'axios'Vue.prototype.$http = Axios 2.请求配置 th ...