Öğretici: Go SDK'sını kullanarak Azure genel MEC'de kaynakları dağıtma
Bu öğreticide, Azure genel çoklu erişimli uç işlemde (MEC) kaynakları dağıtmak için Go SDK'sını kullanmayı öğreneceksiniz. Öğretici, Azure genel MEC çözümünde sanal makine ve genel IP kaynakları dağıtmak için Go ile yazılmış kod parçacıkları sağlar. Azure genel MEC için desteklenen diğer kaynakları ve hizmetleri dağıtmak için aynı modeli ve şablonu kullanabilirsiniz. Bu makale Go ile ilgili bir öğretici olarak tasarlanmamıştır; yalnızca Azure genel MEC'de kaynakları dağıtmak için gereken API çağrılarına odaklanır.
Go hakkında daha fazla bilgi için bkz . Go için Azure geliştiricileri. Go örnekleri için bkz . Azure Go SDK örnekleri.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Sanal makine oluşturun
- Genel IP adresi oluşturma
- Sanal ağ ve genel IP adresi dağıtma
Ön koşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure hesabınıza azure genel MEC'de kaynak dağıtmanıza olanak tanıyan izin verilenler listesine alınmış bir abonelik ekleyin. Etkin bir izin verilen aboneliğiniz yoksa Azure genel MEC ürün ekibine başvurun.
Go'u yükleme
Go'nun en son sürümünü indirip yükleyebilirsiniz. Makinenizde mevcut Go değerinin yerini alır. Aynı makineye birden çok Go sürümü yüklemek istiyorsanız bkz . Go yüklemelerini yönetme.
Kimlik Doğrulaması
Herhangi bir Azure hizmetini kullanmadan önce kimlik doğrulamasını almanız gerekir. Oturum açmak için Azure CLI kullanabilir veya kimlik doğrulama ortamı değişkenlerini ayarlayabilirsiniz.
Oturum açmak için Azure CLI kullanma
Varsayılan tarayıcınız aracılığıyla Azure'da oturum açmak için komut satırında kullanabilirsiniz az login
. Ayrıntılı yönergeler Azure CLI ile oturum açma bölümünde bulunabilir.
Ortam değişkenlerini belirleme
Azure'da kimlik doğrulaması yapmak için aşağıdaki değerlere ihtiyacınız vardır:
- Abonelik kimliği
- İstemci kimliği
- İstemci Gizli Dizisi
- Kiracı Kimliği
Bu yönergeleri izleyerek bu değerleri portaldan alın:
Abonelik Kimliğini Alma
- Azure hesabınızda oturum açın
- Sol kenar çubuğunda Abonelikler'i seçin
- Hangi aboneliğin gerekli olduğunu seçin
- Genel Bakış'ı seçin
- Abonelik Kimliğini Kopyalama
İstemci Kimliği / İstemci Gizli Anahtarı / Kiracı Kimliği Alma
İstemci Kimliği, İstemci Gizli Anahtarı ve Kiracı Kimliği alma hakkında bilgi için bkz . Kaynaklara erişebilen bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturma.
Ortam Değişkenlerini Ayarlama
Değerleri aldıktan sonra aşağıdaki değerleri ortam değişkenleri olarak ayarlamanız gerekir:
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_TENANT_ID
AZURE_SUBSCRIPTION_ID
Geliştirme sisteminizde aşağıdaki ortam değişkenlerini ayarlamak için:
Windows (Yönetici istrator erişimi gereklidir)
- Denetim Masası açma
- Sistem Güvenlik>Sistemi'ne tıklayın
- Soldaki Gelişmiş sistem ayarları'nı seçin
- Sistem Özellikler penceresi içinde düğmeyi
Environment Variables…
seçin. - Değiştirmek istediğiniz özelliği seçin ve ardından Düzenle... seçeneğini belirleyin. Özellik adı listelenmiyorsa Yeni...'yi seçin.
Linux tabanlı işletim sistemi :
export AZURE_CLIENT_SECRET="__CLIENT_SECRET__" export AZURE_TENANT_ID="__TENANT_ID__" export AZURE_SUBSCRIPTION_ID="__SUBSCRIPTION_ID__"````
paketini yükleyin
Yeni SDK, sürüm oluşturma ve bağımlılık yönetimi için Go modüllerini kullanır.
Bu öğreticinin paketlerini proje klasörünüz altına yüklemek için aşağıdaki komutu çalıştırın:
go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5
go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3
go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources
go get github.com/Azure/azure-sdk-for-go/sdk/azcore
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Sanal makine sağlama
package main
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
"log"
"os"
)
func main() {
subscriptionId := os.Getenv("AZURE_SUBSCRIPTION_ID")
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("authentication failure: %+v", err)
}
// client factory
resourcesClientFactory, err := armresources.NewClientFactory(subscriptionId, cred, nil)
if err != nil {
log.Fatalf("cannot create client factory: %+v", err)
}
computeClientFactory, err := armcompute.NewClientFactory(subscriptionId, cred, nil)
if err != nil {
log.Fatalf("cannot create client factory: %+v", err)
}
networkClientFactory, err := armnetwork.NewClientFactory(subscriptionId, cred, nil)
if err != nil {
log.Fatalf("cannot create client factory: %+v", err)
}
// Step 1: Provision a resource group
_, err = resourcesClientFactory.NewResourceGroupsClient().CreateOrUpdate(
context.Background(),
"<resourceGroupName>",
armresources.ResourceGroup{
Location: to.Ptr("westus"),
},
nil,
)
if err != nil {
log.Fatal("cannot create resources group:", err)
}
// Step 2: Provision a virtual network
virtualNetworksClientCreateOrUpdateResponsePoller, err := networkClientFactory.NewVirtualNetworksClient().BeginCreateOrUpdate(
context.Background(),
"<resourceGroupName>",
"<virtualNetworkName>",
armnetwork.VirtualNetwork{
Location: to.Ptr("westus"),
ExtendedLocation: &armnetwork.ExtendedLocation{
Name: to.Ptr("<edgezoneid>"),
Type: to.Ptr(armnetwork.ExtendedLocationTypesEdgeZone),
},
Properties: &armnetwork.VirtualNetworkPropertiesFormat{
AddressSpace: &armnetwork.AddressSpace{
AddressPrefixes: []*string{
to.Ptr("10.0.0.0/16"),
},
},
Subnets: []*armnetwork.Subnet{
{
Name: to.Ptr("test-1"),
Properties: &armnetwork.SubnetPropertiesFormat{
AddressPrefix: to.Ptr("10.0.0.0/24"),
},
},
},
},
},
nil,
)
if err != nil {
log.Fatal("network creation failed", err)
}
virtualNetworksClientCreateOrUpdateResponse, err := virtualNetworksClientCreateOrUpdateResponsePoller.PollUntilDone(context.Background(), nil)
if err != nil {
log.Fatal("cannot create virtual network:", err)
}
subnetID := *virtualNetworksClientCreateOrUpdateResponse.Properties.Subnets[0].ID
// Step 3: Provision an IP address
publicIPAddressesClientCreateOrUpdateResponsePoller, err := networkClientFactory.NewPublicIPAddressesClient().BeginCreateOrUpdate(
context.Background(),
"<resourceGroupName>",
"<publicIPName>",
armnetwork.PublicIPAddress{
Name: to.Ptr("<publicIPName>"),
Location: to.Ptr("westus"),
ExtendedLocation: &armnetwork.ExtendedLocation{
Name: to.Ptr("<edgezoneid>"),
Type: to.Ptr(armnetwork.ExtendedLocationTypesEdgeZone),
},
SKU: &armnetwork.PublicIPAddressSKU{
Name: to.Ptr(armnetwork.PublicIPAddressSKUNameStandard),
},
Properties: &armnetwork.PublicIPAddressPropertiesFormat{
PublicIPAllocationMethod: to.Ptr(armnetwork.IPAllocationMethodStatic),
},
},
nil,
)
if err != nil {
log.Fatal("public ip creation failed", err)
}
publicIPAddressesClientCreateOrUpdateResponse, err := publicIPAddressesClientCreateOrUpdateResponsePoller.PollUntilDone(context.Background(), nil)
if err != nil {
log.Fatal("cannot create public ip: ", err)
}
// Step 4: Provision the network interface client
interfacesClientCreateOrUpdateResponsePoller, err := networkClientFactory.NewInterfacesClient().BeginCreateOrUpdate(
context.Background(),
"<resourceGroupName>",
"<networkInterfaceName>",
armnetwork.Interface{
Location: to.Ptr("westus"),
ExtendedLocation: &armnetwork.ExtendedLocation{
Name: to.Ptr("<edgezoneid>"),
Type: to.Ptr(armnetwork.ExtendedLocationTypesEdgeZone),
},
Properties: &armnetwork.InterfacePropertiesFormat{
EnableAcceleratedNetworking: to.Ptr(true),
IPConfigurations: []*armnetwork.InterfaceIPConfiguration{
{
Name: to.Ptr("<ipConfigurationName>"),
Properties: &armnetwork.InterfaceIPConfigurationPropertiesFormat{
Subnet: &armnetwork.Subnet{
ID: to.Ptr(subnetID),
},
PublicIPAddress: &armnetwork.PublicIPAddress{
ID: publicIPAddressesClientCreateOrUpdateResponse.ID,
},
},
},
},
},
},
nil,
)
if err != nil {
log.Fatal("interface creation failed", err)
}
interfacesClientCreateOrUpdateResponse, err := interfacesClientCreateOrUpdateResponsePoller.PollUntilDone(context.Background(), nil)
if err != nil {
log.Fatal("cannot create interface:", err)
}
// Step 5: Provision the virtual machine
virtualMachinesClientCreateOrUpdateResponsePoller, err := computeClientFactory.NewVirtualMachinesClient().BeginCreateOrUpdate(
context.Background(),
"<resourceGroupName>",
"<vmName>",
armcompute.VirtualMachine{
Location: to.Ptr("westus"),
ExtendedLocation: &armcompute.ExtendedLocation{
Name: to.Ptr("<edgezoneid>"),
Type: to.Ptr(armcompute.ExtendedLocationTypesEdgeZone),
},
Properties: &armcompute.VirtualMachineProperties{
StorageProfile: &armcompute.StorageProfile{
ImageReference: &armcompute.ImageReference{
Publisher: to.Ptr("<publisher>"),
Offer: to.Ptr("<offer>"),
SKU: to.Ptr("<sku>"),
Version: to.Ptr("<version>"),
},
},
HardwareProfile: &armcompute.HardwareProfile{
VMSize: to.Ptr(armcompute.VirtualMachineSizeTypesStandardD2SV3),
},
OSProfile: &armcompute.OSProfile{
ComputerName: to.Ptr("<computerName>"),
AdminUsername: to.Ptr("<adminUsername>"),
AdminPassword: to.Ptr("<adminPassword>"),
},
NetworkProfile: &armcompute.NetworkProfile{
NetworkInterfaces: []*armcompute.NetworkInterfaceReference{
{
ID: interfacesClientCreateOrUpdateResponse.ID,
Properties: &armcompute.NetworkInterfaceReferenceProperties{
Primary: to.Ptr(true),
},
},
},
},
},
},
nil,
)
if err != nil {
log.Fatal("virtual machine creation failed", err)
}
_, err = virtualMachinesClientCreateOrUpdateResponsePoller.PollUntilDone(context.Background(), nil)
if err != nil {
log.Fatal("cannot create virtual machine:", err)
}
}
Kaynakları temizleme
Bu öğreticide, Go SDK'sını kullanarak Azure genel MEC'de bir VM oluşturdunuz. Gelecekte bu kaynaklara ihtiyaç duymayı beklemiyorsanız, oluşturduğunuz kaynak grubunu silmek için Azure portalını kullanın.
Sonraki adımlar
Python SDK'sını kullanarak Azure genel MEC'de bir sanal makine dağıtmak için aşağıdaki makaleye ilerleyin:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin