Gyors útmutató: Azure-beli virtuális gép üzembe helyezése sablonból a Góhoz készült Azure SDK-val
Ez a rövid útmutató bemutatja, hogyan helyezhet üzembe erőforrásokat Azure Resource Manager-sablonból a Góhoz készült Azure SDK használatával. A sablonok az összes erőforrás pillanatképei egy Azure-erőforráscsoportban. Menet közben megismerheti az SDK működését és konvencióit.
A rövid útmutató végén olyan futó virtuális gépe lesz, amelybe felhasználónévvel és jelszóval tud bejelentkezni.
Megjegyzés:
Egy virtuális gép a Góban Resource Manager-sablon nélkül való létrehozásának menetét egy imperatív minta ismerteti, amely bemutatja, hogyan állíthatja össze és konfigurálhatja az összes virtuálisgép-erőforrást az SDK használatával. A minta használata ebben a példában lehetővé teszi az SDK konvencióira való koncentrálást az Azure szolgáltatásarchitektúrájának részletekbe menő ismertetése nélkül.
Ha nem rendelkezik Azure-előfizetéssel, első lépésként mindössze néhány perc alatt létrehozhat egy ingyenes fiókot.
Az Azure Cloud Shell elindítása
Az Azure Cloud Shell egy olyan interaktív felület, amely az Azure-on fut. A gyakran használt eszközök már előre telepítve és konfigurálva vannak a fiókjával történő használathoz. A Másolás gombra kattintva másolja a kódot, illessze be a Cloud Shellbe, majd nyomja le az Enter billentyűt a futtatáshoz.
Néhány módszer a Cloud Shell indításához:
A kódblokk jobb felső sarkában válassza a Kipróbálás lehetőséget.
Nyissa meg a Cloud Shellt a böngészőben.
Válassza a Cloud Shell gombot az Azure Portal jobb felső sarkában található menüben.
Ha az Azure CLI helyi telepítését használja, ehhez a rövid útmutatóhoz a CLI 2.0.28-as vagy újabb verziójára van szükség. Futtassa az az --version
parancsot annak ellenőrzéséhez, hogy a CLI telepítés megfelel-e ennek a követelménynek. If you need to install or upgrade, see Install the Azure CLI.
A Góhoz készült Azure SDK telepítése
A Góhoz készült Azure SDK a Go 1.8-as és újabb verzióival kompatibilis. Az Azure Stack-profilokat használó környezetekben a Go 1.9-es verziója a minimális követelmény. Ha telepítenie kell a Gót, kövesse a Go telepítési utasításait.
A Góhoz készült Azure SDK-t és annak függőségeit a következőn keresztül töltheti le: go get
.
go get -u -d github.com/Azure/azure-sdk-for-go/...
Figyelmeztetés
Győződjön meg arról, hogy az Azure
nagybetűvel szerepeljen az URL-címben. Ellenkező esetben az írásmóddal kapcsolatos importálási hibák fordulhatnak elő az SDK használatakor. Az Azure
szót az importálási utasításokban is nagybetűvel kell megadni.
Egyszerű szolgáltatás létrehozása
Ha nem interaktív módon szeretne bejelentkezni az Azure-ba egy alkalmazással, egy szolgáltatásnévre lesz szüksége. Az egyszerű szolgáltatások a szerepköralapú hozzáférés-vezérlés (RBAC) részei, amely egyedi felhasználói azonosítót hoz létre. Ha új egyszerű szolgáltatást szeretne létrehozni a parancssori felülettel, futtassa a következő parancsot:
az ad sp create-for-rbac --role Contributor \
--scopes /subscriptions/<subscription_id> \
--sdk-auth > quickstart.auth
Az AZURE_AUTH_LOCATION
környezeti változónál állítsa be a fájl teljes elérési útját. Az SDK ezután megkeresi és beolvassa a hitelesítő adatokat közvetlenül a fájlból, anélkül, hogy módosítania kellene valamit, vagy rögzítenie kellene a szolgáltatásnév adatait.
A kód letöltése
A rövid útmutató kódját és az összes függőségét letöltheti a következővel: go get
.
go get -u -d github.com/Azure-Samples/azure-sdk-for-go-samples/quickstarts/deploy-vm/...
Nem kell módosítania a forráskódot, ha az AZURE_AUTH_LOCATION
változó megfelelően van beállítva. Amikor a program fut, ebből a változóból tölti be a szükséges hitelesítési adatokat.
A kód futtatása
Futtassa a rövid útmutatót a go run
paranccsal.
cd $GOPATH/src/github.com/Azure-Samples/azure-sdk-for-go-samples/quickstarts/deploy-vm
go run main.go
Ha az üzembe helyezés sikeres, megjelenik egy üzenet a felhasználónévvel, az IP-címmel és a jelszóval, amelyekkel bejelentkezhet az újonnan létrehozott virtuális gépre. Lépjen be SSH-val a gépre annak ellenőrzéséhez, hogy működik-e.
A felesleges elemek eltávolítása
A rövid útmutató során létrehozott erőforrásokat az erőforráscsoport törlésével, a parancssori felület használatával távolíthatja el.
az group delete -n GoVMQuickstart
Törölje a létrehozott szolgáltatásnevet is. A quickstart.auth
fájlban található egy JSON-kulcs a következőhöz: clientId
. Másolja ezt az értéket a CLIENT_ID_VALUE
-környezet változójához, majd futtassa a következő Azure CLI-parancsot:
az ad sp delete --id ${CLIENT_ID_VALUE}
Ahol megadja a CLIENT_ID_VALUE
értékét a következőből: quickstart.auth
.
Figyelmeztetés
Ha nem törli az alkalmazáshoz tartozó szolgáltatásnevet, az aktív marad a Microsoft Entra-bérlőben. Bár a szolgáltatásnév neve és jelszava is UUID-ként jön létre, a nem használt szolgáltatásnevek és a Microsoft Entra-alkalmazások törlésével győződjön meg arról, hogy a helyes biztonsági eljárásokat követi.
A kód részletei
A rövid útmutató kódja változócsoportokra és több kis függvényre van felosztva, amelyek leírásait itt találja.
Változók, állandók és típusok
Mivel a rövid útmutató önálló, globális állandókat és változókat használ.
const (
resourceGroupName = "GoVMQuickstart"
resourceGroupLocation = "eastus"
deploymentName = "VMDeployQuickstart"
templateFile = "vm-quickstart-template.json"
parametersFile = "vm-quickstart-params.json"
)
// Information loaded from the authorization file to identify the client
type clientInfo struct {
SubscriptionID string
VMPassword string
}
var (
ctx = context.Background()
clientData clientInfo
authorizer autorest.Authorizer
)
Meg vannak határozva a létrehozott erőforrások neveit megadó értékek. Itt a hely is meg van adva, amely módosítható, hogy lássa, hogyan működnek az üzemelő példányok más adatközpontokban. Nem minden adatközponton érhető el az összes szükséges erőforrás.
A clientInfo
típus magában foglalja az összes, hitelesítési fájlból betöltött információt az ügyfelek SDK-ban való beállításához, valamint a virtuális gép jelszavának beállításához.
A templateFile
és parametersFile
állandó az üzembe helyezéshez szükséges fájlokra mutat. Az authorizer
hitelesítéshez való konfigurálását a Go SDK fogja elvégezni. A ctx
változó a hálózati műveletek Go környezete.
Hitelesítés és inicializálás
Az init
függvény állítja be a hitelesítést. Mivel a hitelesítés a rövid útmutatóban minden másnak az előfeltétele, logikus, hogy az inicializálás része legyen. A függvény ezen kívül néhány szükséges adatot is betölt a hitelesítési fájlból az ügyfelek és a virtuális gép konfigurálásához.
func init() {
var err error
authorizer, err = auth.NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)
if err != nil {
log.Fatalf("Failed to get OAuth config: %v", err)
}
authInfo, err := readJSON(os.Getenv("AZURE_AUTH_LOCATION"))
clientData.SubscriptionID = (*authInfo)["subscriptionId"].(string)
clientData.VMPassword = (*authInfo)["clientSecret"].(string)
}
A rendszer először meghívja az auth.NewAuthorizerFromFile függvényt, hogy az betöltse az AZURE_AUTH_LOCATION
helyen található fájl hitelesítési adatait. Ezután a readJSON
függvény (itt ki van hagyva) manuálisan betölti ezt a fájlt a program többi részének futtatásához szükséges két érték lekéréséhez. Ezek egyike az ügyfél előfizetési azonosítója, a másik pedig a szolgáltatásnév titkos kulcsa, amelyet a virtuális gép jelszavához is használni lehet.
Figyelmeztetés
A rövid útmutató egyszerűsége érdekében a szolgáltatásnév jelszava ugyanaz, mint eddig. Éles környezetben ügyeljen arra, hogy soha ne használja fel többször azt a jelszót, amellyel hozzáférhet az Azure-erőforrásokhoz.
A main() műveletfolyamata
A main
függvény egyszerű, csak a műveletek folyamatát jelzi, és hibaellenőrzést végez.
func main() {
group, err := createGroup()
if err != nil {
log.Fatalf("failed to create group: %v", err)
}
log.Printf("Created group: %v", *group.Name)
log.Printf("Starting deployment: %s", deploymentName)
result, err := createDeployment()
if err != nil {
log.Fatalf("Failed to deploy: %v", err)
}
if result.Name != nil {
log.Printf("Completed deployment %v: %v", deploymentName, *result.Properties.ProvisioningState)
} else {
log.Printf("Completed deployment %v (no data returned to SDK)", deploymentName)
}
getLogin()
}
A kód által végrehajtott lépések sorrendben a következők:
- Az üzembe helyezendő erőforráscsoport létrehozása (
createGroup
) - Az üzemelő példány létrehozása ebben a csoportban (
createDeployment
) - Az üzembe helyezett virtuális gép bejelentkezési információinak beszerzése és megjelenítése (
getLogin
)
Az erőforráscsoport létrehozása
A createGroup
függvény létrehozza az erőforráscsoportot. A hívásfolyam és az argumentumok megtekintésekor láthatja, hogyan vannak rendszerezve a szolgáltatásinterakciók az SDK-ban.
func createGroup() (group resources.Group, err error) {
groupsClient := resources.NewGroupsClient(clientData.SubscriptionID)
groupsClient.Authorizer = authorizer
return groupsClient.CreateOrUpdate(
ctx,
resourceGroupName,
resources.Group{
Location: to.StringPtr(resourceGroupLocation)})
}
Az Azure szolgáltatással való kommunikáció általános folyamata a következő:
- Hozza létre az ügyfelet a
service.New*Client()
metódussal, ahol az*
aservice
azon erőforrástípusa, amellyel kommunikálni szeretne. Ez a függvény mindig egy előfizetés-azonosítót vesz fel. - Állítsa be az ügyfél engedélyezési metódusát, hogy kommunikálhasson a távoli API-val.
- Végezze el a metódushívást a távoli API-nak megfelelő ügyfélen. A szolgáltatásügyfél-metódusok általában az erőforrás és egy metaadat-objektum nevét veszik fel.
A to.StringPtr
függvénnyel típusátalakítás végezhető. Az SDK metódusainak paraméterei szinte kizárólag mutatókat vesznek, ezért az egyszerűsített metódusok a típusátalakítás megkönnyítése miatt vannak megadva. A dokumentációban lévő autorest/to modulban találja az átalakítók teljes listáját és viselkedését.
A groupsClient.CreateOrUpdate
metódus egy mutatót ad vissza az erőforráscsoportot jelölő adattípusnak. Az ilyen típusú közvetlen visszatérési érték olyan rövid futásidejű műveletet jelez, amelynek szinkronban kell lennie. A következő szakasz a hosszú futásidejű műveletek egy példáját, illetve annak a kezelési módját mutatja be.
Az üzembe helyezés végrehajtása
Amikor létrejött az erőforráscsoport, itt az idő az üzembe helyezéshez. Ez a kód a logika különböző részeinek kihangsúlyozása érdekében kisebb szakaszokra van osztva.
func createDeployment() (deployment resources.DeploymentExtended, err error) {
template, err := readJSON(templateFile)
if err != nil {
return
}
params, err := readJSON(parametersFile)
if err != nil {
return
}
(*params)["vm_password"] = map[string]string{
"value": clientData.VMPassword,
}
// ...
A readJSON
betölti az üzembe helyezési fájlokat, amelyek részletei itt kimaradnak. Ez a függvény visszaad egy *map[string]interface{}
elemet, amely az erőforrás üzembe helyezési hívása metaadatainak felépítéséhez használt típus. A virtuális gép jelszavát is manuálisan kell beállítani az üzembehelyezési paramétereknél.
// ...
deploymentsClient := resources.NewDeploymentsClient(clientData.SubscriptionID)
deploymentsClient.Authorizer = authorizer
deploymentFuture, err := deploymentsClient.CreateOrUpdate(
ctx,
resourceGroupName,
deploymentName,
resources.Deployment{
Properties: &resources.DeploymentProperties{
Template: template,
Parameters: params,
Mode: resources.Incremental,
},
},
)
if err != nil {
return
}
Ez a kód ugyanazt a mintát követi, mint az erőforráscsoport létrehozásakor. Létrejön egy új ügyfél, amely hitelesíteni tud az Azure-ral, majd a rendszer meghív egy metódust.
A metódusnak ugyanaz a neve is (CreateOrUpdate
), mint az erőforráscsoportok megfelelő metódusának. Ez a minta több helyen is látható az SDK-ban.
A hasonló munkát végző metódusoknak általában ugyanaz a neve.
A legnagyobb különbség a deploymentsClient.CreateOrUpdate
metódus visszaadott értéke. Az érték típusa Jövőbeli, amely a jövőbeli kialakítási mintát követi. A jövő az Azure-ban egy hosszú futásidejű műveletet jelez, amelyet a művelet befejezésekor lekérdezhet, megszakíthat vagy letilthat.
//...
err = deploymentFuture.Future.WaitForCompletion(ctx, deploymentsClient.BaseClient.Client)
if err != nil {
return
}
return deploymentFuture.Result(deploymentsClient)
}
Ebben a példában a legjobb, ha megvárja a művelet befejezését. Ha a jövőre vár, szüksége van egy környezeti objektumra és a Future
létrehozó ügyfelére. Itt két lehetséges hibaforrás van: Az ügyfél oldalán okozott hiba, amikor megpróbálja meghívni a metódust, illetve egy hibaválasz a kiszolgálóról. Az utóbbit a rendszer a deploymentFuture.Result
hívás részeként adja vissza.
A hozzárendelt IP-cím beszerzése
Ha bármit szeretne tenni az újonnan létrehozott virtuális géppel, szüksége van a hozzárendelt IP-címre. Az IP-címek önmaguk saját külön Azure-erőforrásai, amelyek NIC-erőforrásokhoz kötődnek.
func getLogin() {
params, err := readJSON(parametersFile)
if err != nil {
log.Fatalf("Unable to read parameters. Get login information with `az network public-ip list -g %s", resourceGroupName)
}
addressClient := network.NewPublicIPAddressesClient(clientData.SubscriptionID)
addressClient.Authorizer = authorizer
ipName := (*params)["publicIPAddresses_QuickstartVM_ip_name"].(map[string]interface{})
ipAddress, err := addressClient.Get(ctx, resourceGroupName, ipName["value"].(string), "")
if err != nil {
log.Fatalf("Unable to get IP information. Try using `az network public-ip list -g %s", resourceGroupName)
}
vmUser := (*params)["vm_user"].(map[string]interface{})
log.Printf("Log in with ssh: %s@%s, password: %s",
vmUser["value"].(string),
*ipAddress.PublicIPAddressPropertiesFormat.IPAddress,
clientData.VMPassword)
}
Ez a metódus a paraméterfájlban tárolt adatokra támaszkodik. A kód közvetlenül le tudta kérdezni a virtuális gépről az NIC-t, lekérdezte az NIC-ről az IP-erőforrást, majd közvetlenül lekérdezte az IP-erőforrást. Ez egy hosszú függőség- és műveletlánc, ezért költséges. Mivel a JSON-adat helyiek, ehelyett betölthetők.
A virtuális gép felhasználójának értéke szintén betölthető a JSON-ból. A virtuális gép jelszava korábban már be lett töltve a hitelesítési fájlból.
További lépések
Ebben a rövid útmutatóban egy meglévő sablont helyezett üzembe a Gón keresztül. Ezután az újonnan létrehozott virtuális gépet SSH-n keresztül csatlakoztatta.
Ha többet szeretne megtudni a virtuális gépek Góval való használatáról az Azure-környezetben, lásd: Azure számítási minták a Góhoz vagy Azure erőforrás-felügyeleti példák a Góhoz.
Ha többet szeretne megtudni az SDK-ban elérhető hitelesítési módszerekről, és az általuk támogatott hitelesítési típusokról, lásd: Hitelesítés a Góhoz készült Azure SDK-val.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: