Nasazení cloudových služeb (rozšířená podpora) pomocí sady Azure SDK
Tento článek ukazuje, jak pomocí sady Azure SDK vytvořit nasazení Azure Cloud Services (rozšířená podpora), které má více rolí (Role WebRole a WorkerRole). Popisuje také použití rozšíření RDP (Remote Desktop Protocol). Cloud Services (rozšířená podpora) je model nasazení Azure Cloud Services založený na Azure Resource Manageru.
Požadavky
Projděte si požadavky na nasazení cloudových služeb (rozšířená podpora) a vytvořte požadované prostředky.
Nasazení Cloud Services (rozšířená podpora)
Nasazení cloudových služeb (rozšířená podpora) pomocí sady SDK:
Nainstalujte balíček NuGet sady Azure Compute SDK a inicializujete klienta pomocí standardní metody ověřování:
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;
Vytvořte novou skupinu prostředků instalací balíčku NuGet Azure Resource Manageru:
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);
Vytvořte účet úložiště a kontejner, do kterého uložíte soubor a konfigurační soubor balíčku (.cspkg nebo .zip) (.cscfg) pro nasazení. Nainstalujte balíček NuGet služby Azure Storage. Tento krok je volitelný, pokud používáte existující účet úložiště. Název účtu úložiště musí být jedinečný.
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;
Nahrajte soubor balíčku (.cspkg nebo .zip) do účtu úložiště. Adresa URL balíčku může být identifikátor URI sdíleného přístupového podpisu (SAS) z libovolného účtu úložiště.
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;
Nahrajte konfigurační soubor (.cscfg) do účtu úložiště. Zadejte konfiguraci služby jako formát XML řetězce nebo adresy 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;
Vytvořte virtuální síť a podsíť. Nainstalujte balíček NuGet sítě Azure. Tento krok je volitelný, pokud používáte existující síť a podsíť.
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);
Vytvořte veřejnou IP adresu a nastavte vlastnost popisku DNS veřejné IP adresy. Cloud Services (rozšířená podpora) podporuje pouze veřejnou IP adresu skladové položky Basic . Veřejné IP adresy SKU úrovně Standard nefungují s Cloud Services (rozšířená podpora).
Pokud používáte statickou IP adresu, musíte na ni odkazovat jako na vyhrazenou IP adresu v souboru konfigurace (.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);
Vytvořte objekt profilu sítě a přidružte veřejnou IP adresu k front-endu nástroje pro vyrovnávání zatížení. Platforma Azure automaticky vytvoří prostředek nástroje pro vyrovnávání zatížení SKU Classic ve stejném předplatném jako nasazení. Prostředek nástroje pro vyrovnávání zatížení je v Azure Resource Manageru jen pro čtení. Prostředek můžete aktualizovat pouze prostřednictvím souboru a definice (.csdef) konfigurace cloudových služeb (.cscfg).
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 } } } } };
Vytvořte trezor klíčů. Tento trezor klíčů ukládá certifikáty přidružené k rolím Cloud Services (rozšířená podpora). Trezor klíčů musí být ve stejné oblasti a předplatném jako prostředek Cloud Services (rozšířená podpora) a musí mít jedinečný název. Další informace najdete v tématu Použití certifikátů se službou Cloud Services (rozšířená podpora).
New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosoOrg” -Location “East US”
Aktualizujte zásady přístupu trezoru klíčů a udělte oprávnění certifikátu k vašemu uživatelskému účtu:
Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosoOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete
Případně nastavte zásady přístupu prostřednictvím ID objektu (které můžete získat spuštěním
Get-AzADUser
):Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete
Následující příklad přidá certifikát podepsaný svým držitelem do trezoru klíčů. Kryptografický otisk certifikátu musí být přidán do souboru konfigurace (.cscfg) pro role Cloud Services (rozšířená podpora).
$Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" - SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" -CertificatePolicy $Policy
Vytvořte objekt profilu operačního systému. Profil operačního systému určuje certifikáty, které jsou přidružené k rolím Cloud Services (rozšířená podpora). Použijete stejný certifikát, který jste vytvořili v předchozím kroku.
CloudServiceOsProfile cloudServiceOsProfile = new CloudServiceOsProfile { Secrets = new List<CloudServiceVaultSecretGroup> { New CloudServiceVaultSecretGroup { SourceVault = <sourceVault>, VaultCertificates = <vaultCertificates> } } };
Vytvořte objekt profilu role. Profil role definuje vlastnosti specifické pro konkrétní roli pro skladovou položku, například název, kapacitu a vrstvu.
Tento příklad definuje dvě role: ContosoFrontend a ContosoBackend. Informace o profilu role musí odpovídat roli definované v souboru konfigurace (.cscfg) a souboru definice (.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' } ); } }
(Volitelné) Vytvořte objekt profilu rozšíření pro přidání do nasazení Cloud Services (rozšířená podpora). Tento příklad přidá rozšíření RDP (Remote Desktop Protocol):
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 };
Vytvoření nasazení Cloud Services (rozšířená podpora):
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);
Související obsah
- Projděte si nejčastější dotazy ke cloudovým službám (rozšířená podpora).
- Nasaďte cloudovou službu (rozšířenou podporu) pomocí webu Azure Portal, Azure PowerShellu, šablony ARM nebo sady Visual Studio.
- Navštivte úložiště ukázek cloudových služeb (rozšířená podpora).