Menyebarkan Azure Cloud Services (dukungan yang diperluas) dengan menggunakan SDK Azure
Artikel ini memperlihatkan cara menggunakan Azure SDK untuk membuat penyebaran Azure Cloud Services (dukungan yang diperluas) yang memiliki beberapa peran (WebRole dan WorkerRole). Ini juga mencakup cara menggunakan ekstensi Protokol Desktop Jarak Jauh (RDP). Cloud Services (dukungan yang diperluas) adalah model penyebaran Azure Cloud Services berdasarkan Azure Resource Manager.
Prasyarat
Tinjau prasyarat penyebaran untuk Cloud Services (dukungan yang diperluas) dan buat sumber daya yang diperlukan.
Menyebarkan Azure Cloud Services (dukungan yang diperluas)
Untuk menyebarkan Cloud Services (dukungan yang diperluas) dengan menggunakan SDK:
Instal paket Azure Compute SDK NuGet dan inisialisasi klien dengan menggunakan metode autentikasi standar:
public class CustomLoginCredentials : ServiceClientCredentials { private string AuthenticationToken { get; set; } public override void InitializeServiceClient<T>(ServiceClient<T> client) { var authenticationContext = new AuthenticationContext("https://login.windows.net/{tenantID}"); var credential = new ClientCredential(clientId: "{clientID}", clientSecret: "{clientSecret}"); var result = authenticationContext.AcquireTokenAsync(resource: "https://management.core.windows.net/", clientCredential: credential); if (result == null) throw new InvalidOperationException("Failed to obtain the JWT token"); AuthenticationToken = result.Result.AccessToken; } public override async Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (request == null) throw new ArgumentNullException("request"); if (AuthenticationToken == null) throw new InvalidOperationException("Token Provider Cannot Be Null"); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AuthenticationToken); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //request.Version = new Version(apiVersion); await base.ProcessHttpRequestAsync(request, cancellationToken); } } var creds = new CustomLoginCredentials(); m_subId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID"); ResourceManagementClient m_ResourcesClient = new ResourceManagementClient(creds); NetworkManagementClient m_NrpClient = new NetworkManagementClient(creds); ComputeManagementClient m_CrpClient = new ComputeManagementClient(creds); StorageManagementClient m_SrpClient = new StorageManagementClient(creds); m_ResourcesClient.SubscriptionId = m_subId; m_NrpClient.SubscriptionId = m_subId; m_CrpClient.SubscriptionId = m_subId; m_SrpClient.SubscriptionId = m_subId;
Buat grup sumber daya baru dengan menginstal paket NuGet Azure Resource Manager:
var resourceGroups = m_ResourcesClient.ResourceGroups; var m_location = “East US”; var resourceGroupName = "ContosoRG";//provide existing resource group name, if created already var resourceGroup = new ResourceGroup(m_location); resourceGroup = await resourceGroups.CreateOrUpdateAsync(resourceGroupName, resourceGroup);
Buat akun penyimpanan dan kontainer tempat Anda menyimpan file dan konfigurasi paket (.cspkg atau .zip) (.cscfg) untuk penyebaran. Pasang paket Azure Storage NuGet. Langkah ini bersifat opsional jika Anda menggunakan akun penyimpanan yang sudah ada. Nama akun penyimpanan harus unik.
string storageAccountName = “ContosoSAS” var stoInput = new StorageAccountCreateParameters { Location = m_location, Kind = Microsoft.Azure.Management.Storage.Models.Kind.StorageV2, Sku = new Microsoft.Azure.Management.Storage.Models.Sku(SkuName.StandardRAGRS), }; StorageAccount storageAccountOutput = m_SrpClient.StorageAccounts.Create(rgName, storageAccountName, stoInput); bool created = false; while (!created) { Thread.Sleep(600); var stos = m_SrpClient.StorageAccounts.ListByResourceGroup(rgName); created = stos.Any( t => StringComparer.OrdinalIgnoreCase.Equals(t.Name, storageAccountName)); } StorageAccount storageAccountOutput = m_SrpClient.StorageAccounts.GetProperties(rgName, storageAccountName);. var accountKeyResult = m_SrpClient.StorageAccounts.ListKeysWithHttpMessagesAsync(rgName, storageAccountName).Result; CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials(storageAccountName, accountKeyResult.Body.Keys.FirstOrDefault(). Value), useHttps: true); var blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("sascontainer"); container.CreateIfNotExistsAsync().Wait(); sharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy(); sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddDays(-1); sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddDays(2); sasConstraints.Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write;
Unggah file paket (.cspkg atau .zip) ke akun penyimpanan. URL paket dapat menjadi tanda tangan akses bersama (SAS) URI dari akun penyimpanan apa pun.
CloudBlockBlob cspkgblockBlob = container.GetBlockBlobReference(“ContosoApp.cspkg”); cspkgblockBlob.UploadFromFileAsync(“./ContosoApp/ContosoApp.cspkg”). Wait(); //Generate the shared access signature on the blob, setting the constraints directly on the signature. string cspkgsasContainerToken = cspkgblockBlob.GetSharedAccessSignature(sasConstraints); //Return the URI string for the container, including the SAS token. string cspkgSASUrl = cspkgblockBlob.Uri + cspkgsasContainerToken;
Unggah file konfigurasi (.cscfg) ke akun penyimpanan. Tentukan konfigurasi layanan sebagai format XML string atau URL.
CloudBlockBlob cscfgblockBlob = container.GetBlockBlobReference(“ContosoApp.cscfg”); cscfgblockBlob.UploadFromFileAsync(“./ContosoApp/ContosoApp.cscfg”). Wait(); //Generate the shared access signature on the blob, setting the constraints directly on the signature. string sasCscfgContainerToken = cscfgblockBlob.GetSharedAccessSignature(sasConstraints); //Return the URI string for the container, including the SAS token. string cscfgSASUrl = cscfgblockBlob.Uri + sasCscfgContainerToken;
Buat jaringan virtual dan subnet. Pasang paket Azure Network NuGet. Langkah ini bersifat opsional jika Anda menggunakan akun penyimpanan yang sudah ada.
VirtualNetwork vnet = new VirtualNetwork(name: vnetName) { AddressSpace = new AddressSpace { AddressPrefixes = new List<string> { "10.0.0.0/16" } }, Subnets = new List<Subnet> { new Subnet(name: subnetName) { AddressPrefix = "10.0.0.0/24" } }, Location = m_location }; m_NrpClient.VirtualNetworks.CreateOrUpdate(resourceGroupName, “ContosoVNet”, vnet);
Buat alamat IP publik dan atur properti label DNS alamat IP publik. Cloud Services (dukungan yang diperluas) hanya mendukung alamat IP publik SKU Dasar . Alamat IP publik SKU standar tidak berfungsi dengan Cloud Services (dukungan yang diperluas).
Jika Anda menggunakan alamat IP statis, Anda harus mereferensikannya sebagai alamat IP yang dipesan dalam file konfigurasi (.cscfg).
PublicIPAddress publicIPAddressParams = new PublicIPAddress(name: “ContosIp”) { Location = m_location, PublicIPAllocationMethod = IPAllocationMethod.Dynamic, DnsSettings = new PublicIPAddressDnsSettings() { DomainNameLabel = “contosoappdns” } }; PublicIPAddress publicIpAddress = m_NrpClient.PublicIPAddresses.CreateOrUpdate(resourceGroupName, publicIPAddressName, publicIPAddressParams);
Buat objek profil jaringan dan kaitkan alamat IP publik dengan ujung depan load balancer. Platform Azure secara otomatis membuat sumber daya load balancer SKU Klasik dalam langganan yang sama dengan penyebaran. Sumber daya load balancer bersifat baca-saja di Azure Resource Manager. Anda hanya dapat memperbarui sumber daya melalui file konfigurasi (.cscfg) konfigurasi Cloud Services (.cscfg) dan definisi (.csdef).
LoadBalancerFrontendIPConfiguration feipConfiguration = new LoadBalancerFrontendIPConfiguration() { Name = “ContosoFe”, Properties = new LoadBalancerFrontendIPConfigurationProperties() { PublicIPAddress = new CM.SubResource() { Id = $"/subscriptions/{m_subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPAddresses/{publicIPAddressName}", } } }; CloudServiceNetworkProfile cloudServiceNetworkProfile = new CloudServiceNetworkProfile() { LoadBalancerConfigurations = new List<LoadBalancerConfiguration>() { new LoadBalancerConfiguration() { Name = 'ContosoLB', Properties = new LoadBalancerConfigurationProperties() { FrontendIPConfigurations = new List<LoadBalancerFrontendIPConfiguration>() { feipConfig } } } } };
Membuat brankas kunci. Brankas kunci ini menyimpan sertifikat yang terkait dengan peran Cloud Services (dukungan yang diperluas). Brankas kunci harus berada di wilayah dan langganan yang sama dengan sumber daya Cloud Services (dukungan yang diperluas) dan memiliki nama yang unik. Untuk informasi selengkapnya, lihat Menggunakan sertifikat dengan Cloud Services (dukungan yang diperluas).
New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosoOrg” -Location “East US”
Perbarui kebijakan akses brankas kunci dan berikan izin sertifikat ke akun pengguna Anda:
Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosoOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete
Atau, atur kebijakan akses melalui ID objek (yang bisa Anda dapatkan dengan menjalankan
Get-AzADUser
):Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete
Contoh berikut menambahkan sertifikat yang ditandatangani sendiri ke brankas kunci. Thumbprint sertifikat harus ditambahkan dalam file konfigurasi (.cscfg) untuk peran Cloud Services (dukungan yang diperluas).
$Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" - SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" -CertificatePolicy $Policy
Buat objek profil OS. Profil OS menentukan sertifikat yang terkait dengan peran Cloud Services (dukungan yang diperpanjang). Anda menggunakan sertifikat yang sama dengan yang Anda buat di langkah sebelumnya.
CloudServiceOsProfile cloudServiceOsProfile = new CloudServiceOsProfile { Secrets = new List<CloudServiceVaultSecretGroup> { New CloudServiceVaultSecretGroup { SourceVault = <sourceVault>, VaultCertificates = <vaultCertificates> } } };
Buat objek profil OS. Profil peran mendefinisikan properti khusus peran untuk SKU, seperti nama, kapasitas, dan tingkatan.
Contoh ini mendefinisikan dua peran: ContosoFrontend dan ContosoBackend. Informasi profil peran harus cocok dengan peran yang ditentukan dalam file konfigurasi (.cscfg) dan file definisi (.csdef).
CloudServiceRoleProfile cloudServiceRoleProfile = new CloudServiceRoleProfile() { Roles = new List<CloudServiceRoleProfileProperties>(); // foreach role in cloudService roles.Add(new CloudServiceRoleProfileProperties() { Name = 'ContosoFrontend', Sku = new CloudServiceRoleSku { Name = 'Standard_D1_v2', Capacity = 2, Tier = 'Standard' } ); roles.Add(new CloudServiceRoleProfileProperties() { Name = 'ContosoBackend', Sku = new CloudServiceRoleSku { Name = 'Standard_D1_v2', Capacity = 2, Tier = 'Standard' } ); } }
(Opsional) Buat objek profil ekstensi untuk ditambahkan ke penyebaran Cloud Services (dukungan yang diperluas). Contoh ini menambahkan ekstensi Protokol Desktop Jauh (RDP):
string rdpExtensionPublicConfig = "<PublicConfig>" + "<UserName>adminRdpTest</UserName>" + "<Expiration>2021-10-27T23:59:59</Expiration>" + "</PublicConfig>"; string rdpExtensionPrivateConfig = "<PrivateConfig>" + "<Password>VsmrdpTest!</Password>" + "</PrivateConfig>"; Extension rdpExtension = new Extension { Name = name, Properties = new CloudServiceExtensionProperties { Publisher = "Microsoft.Windows.Azure.Extensions", Type = "RDP", TypeHandlerVersion = "1.2.1", AutoUpgradeMinorVersion = true, Settings = rdpExtensionPublicConfig, ProtectedSettings = rdpExtensionPrivateConfig, RolesAppliedTo = [“*”], } }; CloudServiceExtensionProfile cloudServiceExtensionProfile = new CloudServiceExtensionProfile { Extensions = rdpExtension };
Buat penyebaran Cloud Services (dukungan yang diperluas):
CloudService cloudService = new CloudService { Properties = new CloudServiceProperties { RoleProfile = cloudServiceRoleProfile Configuration = < Add Cscfg xml content here>, // ConfigurationUrl = <Add your configuration URL here>, PackageUrl = <Add cspkg SAS url here>, ExtensionProfile = cloudServiceExtensionProfile, OsProfile= cloudServiceOsProfile, NetworkProfile = cloudServiceNetworkProfile, UpgradeMode = 'Auto' }, Location = m_location }; CloudService createOrUpdateResponse = m_CrpClient.CloudServices.CreateOrUpdate(“ContosOrg”, “ContosoCS”, cloudService);
Konten terkait
- Tinjau tanya jawab umum untuk Azure Cloud Services (dukungan yang diperluas).
- Sebarkan Cloud Services (dukungan yang diperluas) dengan menggunakan portal Azure, Azure PowerShell, templat ARM, atau Visual Studio.
- Kunjungi repositori sampel Cloud Services (dukungan perpanjangan).