Cloud Services (kiterjesztett támogatás) üzembe helyezése az Azure SDK használatával
Ez a cikk bemutatja, hogyan helyezhet üzembe egy több szerepkört (webes és feldolgozói szerepkört) és távoli asztali bővítményt tartalmazó Cloud Services-példányt az Azure SDK használatával. A Cloud Services (kiterjesztett támogatás) az Azure Cloud Services Azure Resource Manageren alapuló üzemi modellje.
Előkészületek
Tekintse át a Cloud Services (kiterjesztett támogatás) üzembehelyezési előfeltételeit , és hozzon létre társított erőforrásokat.
Cloud Services üzembe helyezése (kiterjesztett támogatás)
Telepítse az Azure Compute SDK NuGet-csomagot , és inicializálja az ügyfelet egy szabványos hitelesítési mechanizmus használatával.
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;
Hozzon létre egy új erőforráscsoportot az Azure Resource Manager NuGet-csomag telepítésével.
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);
Hozzon létre egy tárfiókot és egy tárolót, ahol a szolgáltatáscsomag (.cspkg) és a szolgáltatáskonfigurációs (.cscfg) fájlokat fogja tárolni. Telepítse az Azure Storage NuGet-csomagot. Ez a lépés nem kötelező, ha meglévő tárfiókot használ. A tárfiók nevének egyedinek kell lennie.
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;
Töltse fel a szolgáltatáscsomag (.cspkg) fájlt a tárfiókba. A csomag URL-címe egy közös hozzáférésű jogosultságkód (SAS) URI lehet bármely tárfiókból.
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;
Töltse fel a szolgáltatáskonfigurációs (.cscfg) fájlt a tárfiókba. Adja meg a szolgáltatáskonfigurációt sztring XML- vagy URL-formátumként.
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;
Hozzon létre egy virtuális hálózatot és egy alhálózatot. Telepítse az Azure Network NuGet-csomagot. Ez a lépés nem kötelező, ha meglévő hálózatot és alhálózatot használ.
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);
Hozzon létre egy nyilvános IP-címet, és állítsa be a nyilvános IP-cím DNS-címketulajdonságát. A Cloud Services (kiterjesztett támogatás) csak az alapszintű termékváltozat nyilvános IP-címét támogatja. A standard termékváltozatú nyilvános IP-címek nem működnek a Cloud Services szolgáltatással. Ha statikus IP-címet használ, fenntartott IP-címként kell hivatkoznia rá a Service Configuration (.cscfg) fájlban
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);
Hozzon létre egy hálózati profilobjektumot, és társítsa a nyilvános IP-címet a terheléselosztó előtéréhez. Az Azure-platform automatikusan létrehoz egy "klasszikus" termékváltozatú terheléselosztó-erőforrást ugyanabban az előfizetésben, mint a felhőszolgáltatás-erőforrás. A terheléselosztó erőforrás egy írásvédett erőforrás az ARM-ben. Az erőforrás minden frissítése csak a felhőszolgáltatás üzembehelyezési fájljain (.cscfg & .csdef) keresztül támogatott.
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 } } } } };
Kulcstartó létrehozása. Ez a kulcstartó a Cloud Services (kiterjesztett támogatási) szerepkörökhöz társított tanúsítványok tárolására szolgál. A kulcstartónak ugyanabban a régióban és előfizetésben kell lennie, mint a Cloud Services (kiterjesztett támogatási) példány, és egyedi névvel kell rendelkeznie. További információ: Tanúsítványok használata az Azure Cloud Servicesben (kiterjesztett támogatás).
New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosoOrg” -Location “East US”
Frissítse a kulcstartó hozzáférési szabályzatát, és adjon tanúsítványengedélyeket a felhasználói fióknak.
Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosoOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete
Másik lehetőségként állítsa be a hozzáférési szabályzatot az objektumazonosítón keresztül (amelyet a futtatással
Get-AzADUser
érhet el).Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' - ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete
Ebben a példában egy önaláírt tanúsítványt adunk hozzá egy kulcstartóhoz. A tanúsítvány ujjlenyomatát hozzá kell adni a szolgáltatáskonfigurációs (.cscfg) fájlhoz a Cloud Services (kiterjesztett támogatási) szerepkörökben való üzembe helyezéshez.
$Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" - SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" - CertificatePolicy $Policy
Hozzon létre egy operációsrendszer-profilobjektumot. Az operációsrendszer-profil megadja a Cloud Services (kiterjesztett támogatási) szerepkörökhöz társított tanúsítványokat. Ez ugyanaz a tanúsítvány, amelyet az előző lépésben hoztunk létre.
CloudServiceOsProfile cloudServiceOsProfile = new CloudServiceOsProfile { Secrets = new List<CloudServiceVaultSecretGroup> { New CloudServiceVaultSecretGroup { SourceVault = <sourceVault>, VaultCertificates = <vaultCertificates> } } };
Szerepkörprofil-objektum létrehozása. A szerepkörprofilok szerepkörspecifikus tulajdonságokat határoznak meg egy termékváltozathoz, például a nevet, a kapacitást és a réteget.
Ebben a példában két szerepkört határozunk meg: ContosoFrontend és ContosoBackend. A szerepkörprofil adatainak meg kell egyezniük a szolgáltatáskonfigurációs (.cscfg) fájlban és a szolgáltatásdefiníciós (.csdef) fájlban meghatározott szerepkör-konfigurációval.
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' } ); } }
(Nem kötelező) Hozzon létre egy bővítményprofil-objektumot, amelyet fel szeretne venni a Cloud Services (kiterjesztett támogatási) példányba. Ebben a példában hozzáadunk egy RDP-bővítményt.
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 };
Hozza létre a Cloud Services (kiterjesztett támogatási) példány üzembe helyezését.
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);
További lépések
- Tekintse át a Cloud Servicesre (kiterjesztett támogatás) vonatkozó gyakori kérdéseket .
- A Cloud Services (kiterjesztett támogatás) üzembe helyezése az Azure Portal, a PowerShell, a sablon vagy a Visual Studio használatával.
- Látogasson el a Cloud Services mintaadattárába (kiterjesztett támogatás)