Azure Java Management APIs – שימוש ב- eclipse ו- maven על גבי Azure

סט כלי הפיתוח עבור Java ב- Azure Java SDK) Azure) כולל גם ספרייה לניהול חשבון Azure והשירותים השונים הכרוכים בכך. כך ניתן ליצור מכונות וירטואליות, websites, לבדוק את כל ה- certificates בחשבון ועוד. למעשה כל הפעולות שניתן לבצע דרך פורטל הניהול של Azure חשופות דרך ה- API.

Java SDK היא ספריית קוד פתוח המתארחת על GitHub, בנוסף לספריות נוספות בשפות תכנות רבות כמו PHP, Python  ועוד. את ה- Java SDK ניתן להוריד כאן, וקוד המקור מתאסן ב github
כדי להקל על הפיתוח ב- Azure באמצעות Java, פיתחה מיקרוסופט  תוספים (plugins), עבור eclipse.
מידע מפורט על eclipse על גבי Azure ניתן למצוא כאן.

בפוסט זה ניצור דוגמאת קוד פשוטה המשתמשת ב- Azure Java Management API תוך כדי יצירת פרויקט Maven ב- Eclipse ומציגה את כל המכונות הוירטואליות תחת subscription.

כדי ללמוד איך להתקין את Azure Toolkit for Eclipse עקוב אחרי ההוראות הבאות בבלוג MSDN.

התקנת הספריות על ידי Maven

תחילה נוודא שהורדנו והתקנו את Azure Java SDK בהתאם למערכת ההפעלה עליה אנו רצים http://azure.microsoft.com/en-us/develop/java/

נתחיל על ידי יצירת פרויקט Maven חדש:

New Maven

כעת נוסיף את azure-management-compute כתלות (dependency) בקובץ ה- pom של הפרויקט:

Adding azure-management-compute

Management Certificate – מה זה?

Azure Management Certificate היא X.509 v3 certificate המשמש לאימות והרשאת גישה ל- Azure עבור כלים כמו Visual Studio או אפליקציות המשתמשות ב- Management APIs לצורך ניהול חשבון ה- Azure.

את ה- certificate יש להעלות לחשבון Azure תחת ה- subscription אליו נרצה לאפשר גישה.
יצירת ה- certificate והעלאה ל- Azure מפורטת כאן. ל- Azure נעלה את קובץ ה- .cer  כאשר אנחנו זקוקים לצורך מתן הרשאת הגישה לקוד שנכתוב את מיקומו של קובץ ה- PFX ואת הססמה. מידע על יצירת .pfx ניתן למצוא כאן.
לצורך עבודה עם Java נצטרך להמיר את ה- .pfx לקובץ מסוג .jks על ידי הרצת פקודה פשוטה:

c:\java\bin\keytool.exe -importkeystore -srckeystore >.pfx full path> -destkeystore  -srcstoretype pkcs12 -deststoretype JKS

מידע נוסף על יצירת jks ניתן למצוא כאן

ועכשיו לקוד…

לצורך הדוגמא ניצור מחלקה class חדשה, עם פונקצית main שתדפיס את כל ה- Virtual Machines תחת ה- subscription.

תחילה, נוסיף את כל הכרזות ה- import הבאות לקוד:

import java.net.URI;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.microsoft.windowsazure.Configuration;
import com.microsoft.windowsazure.core.utils.KeyStoreType;
import com.microsoft.windowsazure.management.compute.ComputeManagementClient;
import com.microsoft.windowsazure.management.compute.ComputeManagementService;
import com.microsoft.windowsazure.management.compute.models.HostedServiceGetDetailedResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceListResponse;
import com.microsoft.windowsazure.management.compute.models.Role;
import com.microsoft.windowsazure.management.compute.models.RoleInstance;
import com.microsoft.windowsazure.management.compute.models.VirtualMachineRoleType;
import com.microsoft.windowsazure.management.configuration.ManagementConfiguration;

 

בתוך פונקצית ה- main ניצור instance חדש של אוביקט Configuration, ונספק לו את כל הפרטים ל- jsk אותו יצרנו בשלב הקודם:

public class Program {

	static String uri = "https://management.core.windows.net/";
	static String subscriptionId = "acb82153-0e40-4315-b531-01a98c3d3884";
	static String keyStoreLocation = "c:\\azureDemoCert.jks";
	static String keyStorePassword = "demo-pass";	

	public static void main(String[] args) throws Exception{

		Configuration config = ManagementConfiguration.configure(
				new URI(uri), 
				subscriptionId,
				keyStoreLocation, // the file path to the JKS
				keyStorePassword, // the password for the JKS
				KeyStoreType.jks // flag indeicating we are usinbg JKS keystore
		);

		listVirtualMachines(config);	
      }

אין קריאת API מיוחדת ל- Virtual Machines, לכן יש לעבור על כל ה- roles כדי למצוא את רשימת ה- VMs. Role עם VirtualMachineRoleType.PersistentVMRole הוא VM.

קטע הקוד הבא מדפיס רק את את ה- VMs ומספר properties שלהם:

private static void listVirtualMachines(Configuration config) throws Exception {      
	ComputeManagementClient computeManagementClient = ComputeManagementService.create(config);	       
      HostedServiceListResponse hostedServiceListResponse =
                                    computeManagementClient.getHostedServicesOperations().list();
     ArrayList hostedServicelist =
                                     hostedServiceListResponse.getHostedServices();        

     for (HostedServiceListResponse.HostedService hostedService : hostedServicelist) {
            HostedServiceGetDetailedResponse hostedServiceGetDetailedResponse =
computeManagementClient.getHostedServicesOperations().getDetailed(hostedService.getServiceName());                                
            ArrayList deploymentlist = hostedServiceGetDetailedResponse.getDeployments();        

            for (HostedServiceGetDetailedResponse.Deployment deployment : deploymentlist) {
                ArrayList rolelist = deployment.getRoles();

                for (Role role : rolelist) {
                    if ((role.getRoleType()!=null) && (role.getRoleType().equalsIgnoreCase(VirtualMachineRoleType.PersistentVMRole.toString()))) {
                    	System.out.println("=====================================");
                    	System.out.println("Role Name: " + role.getRoleName());

                    	System.out.println("Deployment ID: " + deployment.getPrivateId());
        			System.out.println("\tStatus: " + deployment.getStatus());
        			System.out.println("\tName: " + deployment.getName());
        			System.out.println("\tDNS: " + deployment.getUri().getHost());
        			System.out.println("last time modified: " + deployment.getLastModifiedTime());

        			System.out.println("OS: " + role.getOSVirtualHardDisk().getOperatingSystem());

        			HashMap<String, String> propMap = deployment.getExtendedProperties();
        				Iterator it = propMap.entrySet().iterator();
        			    while (it.hasNext()) {
        			        Map.Entry pairs = (Map.Entry)it.next();
        			        System.out.println(pairs.getKey() + " = " + pairs.getValue());            			        
        			    }            			    
        			    System.out.println("config: " + deployment.getConfiguration());                        
                    }
                }                                        
            }
        }               
    }

לסיכום

בפוסט זה הדגמנו כיצד ניתן להשמש ב- Java SDK באמצעות Eclipse ו- Maven. כאן ראינו דוגמא פשוטה ביותר, אבל ה- SDK מאפשר הרבה יותר מכך – ניתן ליצור ולנהל את ה- Storage Account, Websites יכולים להריץ Java ועוד.

את ה- Java SDK, ניתן למצוא בלינק זה http://azure.github.io לצד SDKs בשפות נוספות. הכלים וההזדמנויות לפיתוח Java ב- Azure ממשיכות להתפתח, דוגמאות קוד ודוקומנטציה עבור Azure Java SDK נמצאות כאן. אני מקווה שתמשיך להתנסות בכלים המגוונים ש- Azure מציעה.

 למידע נוסף אתה מוזמן לפנות לאתר Azure המקומי.

על מנת להתנסות בשירות פשוט הירשם לחודש ניסיון חינם עם קרדיט של 200$.

אנחנו תמיד עומדים כאן לשירותיך אז אנא – צור עימנו קשר

Nava Vaisman Levy

נאוה ויסמן לוי, מומחית טכנלוגיות Azure, מיקרוסופט