Cloud Services implementeren (uitgebreide ondersteuning) met behulp van de Azure SDK
In dit artikel wordt beschreven hoe u de Azure SDK gebruikt om een Implementatie van Azure Cloud Services (uitgebreide ondersteuning) te maken met meerdere rollen (WebRole en WorkerRole). Ook wordt beschreven hoe u de EXTENSIE Remote Desktop Protocol (RDP) gebruikt. Cloud Services (uitgebreide ondersteuning) is een implementatiemodel van Azure Cloud Services op basis van Azure Resource Manager.
Vereisten
Controleer de implementatievereisten voor Cloud Services (uitgebreide ondersteuning) en maak de vereiste resources.
Cloud Services implementeren (uitgebreide ondersteuning)
Cloud Services (uitgebreide ondersteuning) implementeren met behulp van de SDK:
Installeer het Azure Compute SDK NuGet-pakket en initialiseer de client met behulp van een standaardverificatiemethode:
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;
Maak een nieuwe resourcegroep door het Azure Resource Manager NuGet-pakket te installeren:
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);
Maak een opslagaccount en container waarin u het pakketbestand (.cspkg of .zip) en configuratiebestand (.cscfg) voor de implementatie opslaat. Installeer het Azure Storage NuGet-pakket. Deze stap is optioneel als u een bestaand opslagaccount gebruikt. De naam van het opslagaccount moet uniek zijn.
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;
Upload het pakketbestand (.cspkg of .zip) naar het opslagaccount. De pakket-URL kan een SAS-URI (Shared Access Signature) zijn vanuit elk opslagaccount.
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;
Upload het configuratiebestand (.cscfg) naar het opslagaccount. Geef de serviceconfiguratie op als tekenreeks-XML- of URL-indeling.
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;
Maak een virtueel netwerk en subnet. Installeer het Azure Network NuGet-pakket. Deze stap is optioneel als u een bestaand netwerk en subnet gebruikt.
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);
Maak een openbaar IP-adres en stel de eigenschap DNS-label van het openbare IP-adres in. Cloud Services (uitgebreide ondersteuning) ondersteunt alleen een openbaar IP-adres van de Basic-SKU . Openbare IP-adressen van de standard-SKU werken niet met Cloud Services (uitgebreide ondersteuning).
Als u een statisch IP-adres gebruikt, moet u ernaar verwijzen als een gereserveerd IP-adres in het configuratiebestand (.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);
Maak een netwerkprofielobject en koppel het openbare IP-adres aan de front-end van de load balancer. Het Azure-platform maakt automatisch een klassieke SKU-load balancer-resource in hetzelfde abonnement als de implementatie. De load balancer-resource is alleen-lezen in Azure Resource Manager. U kunt de resource alleen bijwerken via het configuratiebestand en definitiebestand (.csdef) van Cloud Services (uitgebreide ondersteuning).
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 } } } } };
Een sleutelkluis maken. In deze sleutelkluis worden certificaten opgeslagen die zijn gekoppeld aan de rollen cloudservices (uitgebreide ondersteuning). De sleutelkluis moet zich in dezelfde regio en hetzelfde abonnement bevinden als de cloudservicesresource (uitgebreide ondersteuning) en een unieke naam hebben. Zie Certificaten gebruiken met Cloud Services (uitgebreide ondersteuning) voor meer informatie.
New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosoOrg” -Location “East US”
Werk het toegangsbeleid van de sleutelkluis bij en ververleent certificaatmachtigingen aan uw gebruikersaccount:
Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosoOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete
U kunt ook het toegangsbeleid instellen via object-id (die u kunt ophalen door uit te voeren
Get-AzADUser
):Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete
In het volgende voorbeeld wordt een zelfondertekend certificaat toegevoegd aan een sleutelkluis. De vingerafdruk van het certificaat moet worden toegevoegd in het configuratiebestand (.cscfg) voor Cloud Services-rollen (uitgebreide ondersteuning).
$Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" - SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" -CertificatePolicy $Policy
Maak een besturingssysteemprofielobject. Het besturingssysteemprofiel geeft de certificaten op die zijn gekoppeld aan Cloud Services-rollen (uitgebreide ondersteuning). U gebruikt hetzelfde certificaat dat u in de vorige stap hebt gemaakt.
CloudServiceOsProfile cloudServiceOsProfile = new CloudServiceOsProfile { Secrets = new List<CloudServiceVaultSecretGroup> { New CloudServiceVaultSecretGroup { SourceVault = <sourceVault>, VaultCertificates = <vaultCertificates> } } };
Maak een rolprofielobject. Een rolprofiel definieert rolspecifieke eigenschappen voor een SKU, zoals naam, capaciteit en laag.
In dit voorbeeld worden twee rollen gedefinieerd: ContosoFrontend en ContosoBackend. Informatie over het rolprofiel moet overeenkomen met de rol die is gedefinieerd in het configuratiebestand (.cscfg)-bestand en -definitiebestand (.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' } ); } }
(Optioneel) Maak een extensieprofielobject om toe te voegen aan uw cloudservicesimplementatie (uitgebreide ondersteuning). In dit voorbeeld wordt een RDP-extensie (Remote Desktop Protocol) toegevoegd:
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 };
De implementatie van Cloud Services (uitgebreide ondersteuning) maken:
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);
Gerelateerde inhoud
- Bekijk veelgestelde vragen over Cloud Services (uitgebreide ondersteuning).
- Implementeer Cloud Services (uitgebreide ondersteuning) met behulp van Azure Portal, Azure PowerShell, een ARM-sjabloon of Visual Studio.
- Ga naar de opslagplaats met voorbeelden van Cloud Services (uitgebreide ondersteuning).