Azure SDK'sını kullanarak Cloud Services'i (genişletilmiş destek) dağıtma
Bu makalede, birden çok rolü (web rolü ve çalışan rolü) ve uzak masaüstü uzantısı olan bir Cloud Services (genişletilmiş destek) örneğini dağıtmak için Azure SDK'nın nasıl kullanılacağı gösterilmektedir. Cloud Services (genişletilmiş destek), Azure Resource Manager'ı temel alan bir Azure Cloud Services dağıtım modelidir.
Başlamadan önce
Cloud Services (genişletilmiş destek) için dağıtım önkoşullarını gözden geçirin ve ilişkili kaynaklar oluşturun.
Cloud Services'ı dağıtma (genişletilmiş destek)
Azure İşlem SDK'sı NuGet paketini yükleyin ve standart bir kimlik doğrulama mekanizması kullanarak istemciyi başlatı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;
Azure Resource Manager NuGet paketini yükleyerek yeni bir kaynak grubu oluşturun.
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);
Hizmet paketi (.cspkg) ve hizmet yapılandırması (.cscfg) dosyalarını depoladığınız bir depolama hesabı ve kapsayıcı oluşturun. Azure Depolama NuGet paketini yükleyin. Mevcut bir depolama hesabı kullanıyorsanız bu adım isteğe bağlıdır. Depolama hesabı adı benzersiz olmalıdır.
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;
Hizmet paketi (.cspkg) dosyasını depolama hesabına yükleyin. Paket URL'si, herhangi bir depolama hesabından paylaşılan erişim imzası (SAS) URI'si olabilir.
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;
Hizmet yapılandırma (.cscfg) dosyanızı depolama hesabına yükleyin. Hizmet yapılandırmasını dize XML'si veya URL biçimi olarak belirtin.
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;
Sanal ağı ve alt ağı oluşturun. Azure Ağ NuGet paketini yükleyin. Mevcut bir ağ ve alt ağ kullanıyorsanız bu adım isteğe bağlıdır.
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);
Bir genel IP adresi oluşturun ve genel IP adresinin DNS etiketi özelliğini ayarlayın. Cloud Services (genişletilmiş destek) yalnızca Temel SKU Genel IP adreslerini destekler. Standart SKU Genel IP'leri Cloud Services ile çalışmaz. Statik IP kullanıyorsanız, buna Hizmet Yapılandırmasında Ayrılmış IP (.cscfg) dosyası olarak başvurmanız gerekir
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);
Bir Ağ Profili Nesnesi oluşturun ve genel IP adresini yük dengeleyicinin ön ucuyla ilişkilendirin. Azure platformu, bulut hizmeti kaynağıyla aynı abonelikte otomatik olarak bir 'Klasik' SKU yük dengeleyici kaynağı oluşturur. Yük dengeleyici kaynağı ARM'de salt okunur bir kaynaktır. Kaynakta yapılan tüm güncelleştirmeler yalnızca bulut hizmeti dağıtım dosyaları (.cscfg & .csdef) aracılığıyla desteklenir
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 } } } } };
Anahtar kasası oluşturma. Bu anahtar kasası, Cloud Services (genişletilmiş destek) rolleri ile ilişkili sertifikaları depolamak için kullanılır. Anahtar kasası, Cloud Services (genişletilmiş destek) örneğiyle aynı bölgede ve abonelikte bulunmalı ve benzersiz bir ada sahip olmalıdır. Daha fazla bilgi için bkz. Azure Cloud Services ile sertifikaları kullanma (genişletilmiş destek).
New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosoOrg” -Location “East US”
Anahtar kasasının erişim ilkesini güncelleştirin ve kullanıcı hesabınıza sertifika izinleri verin.
Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosoOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete
Alternatif olarak, nesne kimliği (komutunu çalıştırarak
Get-AzADUser
elde edebilirsiniz) aracılığıyla erişim ilkesini ayarlayın.Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' - ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete
Bu örnekte, bir anahtar kasasına otomatik olarak imzalanan bir sertifika ekleyeceğiz. Sertifika parmak izi, Cloud Services (genişletilmiş destek) rollerinde dağıtım için hizmet yapılandırması (.cscfg) dosyasına eklenmelidir.
$Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" - SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" - CertificatePolicy $Policy
bir işletim sistemi profili nesnesi oluşturun. İşletim sistemi profili, Cloud Services (genişletilmiş destek) rolleri ile ilişkili sertifikaları belirtir. Burada, önceki adımda oluşturduğumuz sertifikayla aynıdır.
CloudServiceOsProfile cloudServiceOsProfile = new CloudServiceOsProfile { Secrets = new List<CloudServiceVaultSecretGroup> { New CloudServiceVaultSecretGroup { SourceVault = <sourceVault>, VaultCertificates = <vaultCertificates> } } };
Rol profili nesnesi oluşturun. Rol profili bir SKU için ad, kapasite ve katman gibi role özgü özellikleri tanımlar.
Bu örnekte iki rol tanımlayacağız: ContosoFrontend ve ContosoBackend. Rol profili bilgileri, hizmet yapılandırması (.cscfg) dosyasında ve hizmet tanımı (.csdef) dosyasında tanımlanan rol yapılandırmasıyla eşleşmelidir.
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' } ); } }
(İsteğe bağlı) Cloud Services (genişletilmiş destek) örneğinize eklemek istediğiniz bir uzantı profili nesnesi oluşturun. Bu örnekte, bir RDP uzantısı ekleyeceğiz.
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 };
Cloud Services (genişletilmiş destek) örneğinin dağıtımını oluşturun.
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);
Sonraki adımlar
- Cloud Services (genişletilmiş destek) için sık sorulan soruları gözden geçirin.
- Azure portalını, PowerShell'i, şablonu veya Visual Studio'yu kullanarak Cloud Services'ı (genişletilmiş destek) dağıtın.
- Cloud Services için Örnekler deposunu ziyaret edin (genişletilmiş destek)