content top
תזמון משימות ב-SQL Azure בעזרת Automation Accounts (והוצאת קיטור..)

תזמון משימות ב-SQL Azure בעזרת Automation Accounts (והוצאת קיטור..)

לפני כחצי שנה פרסמתי פוסט בשם תזמון משימות ב-SQL Azure בעזרת Azure Function ובו הסבר על תזמון של קוד #C שפונה ל-SQL Databse (גם הוא – ב-Azure),
וכעת אותה הגברת בשינוי כותרת: הרצה של קוד PowerShell, בעזרת Automation Account.

העובדה ש-Azure תומך גם ב-#C וגם ב-PowerShell זה מצויין, אך מה שפחות מובן זו העובדה שיש שני כלים שונים לתזמון של משימות. לא ברור למה.
אולי זה כתוצאה מההשקעה של מיקרוסופט שמתבטאת בצוותים רבים שעובדים על משימות שונות, וכל אחד מקים תשתית משלו; ובעובדה שקשה למצוא את הידיים והרגליים בשלל האפשרויות הקיימות (“שלל אפשרויות” – טוב, “קשה למצוא” – לא טוב).
התלונה העיקרית היא לגבי חוסר הידידותיות של המערכת. גדולתם של הכלים של מיקרוסופט היא בעובדה שגם המשתמש המתחיל יכול היה להתקין אותם בשיטת enter-enter-enter הידועה (כלומר- לאשר את ברירות המחדל ולסמוך על המערכת שתעבוד). ב-Azure זה לא ככה, והכל מסובך; בעיקר אם אינכם אדמיניסטרטורים. יותר מדי דברים לא עובדים כשלמשתמש יש הרשאות מוגבלות, גם אם הוא מורשה לבצע את הפעולה הספציפית בה מדובר: הרצות של PowerShell שעובדות כשמריצים מחוץ ל-Azure אינן עובדות כשמריצים מתוכו, Connection Strings שפועלים ללא דופי מבחוץ – נכשלים מבפנים.. בקיצור: דברים לא עובדים, ולאחר נסיונות אינספור מגלים שרק עם הרשאות Admin זה עובד.
אני מתאר לעצמי שאם סמנכ”ל מיקרוסופט לענייני הרצת קודים ב-Azure היה נדרש לעניין – הוא היה בוודאי מראה לנו אין עושים קליק ימני פה, משניים הגדרה שם ו-וואלה: זה עובד; אלא שבשום מקום אחר זה לא עובד כך. כולם מתחברים ל-SSMS באותה צורה עם שם וסיסמה, וכל אחד יכול לבצע את מה שהוא מורשה.

התלוננו מספיק, אז ניגש לעבודה!

יצירת Automation Account

האוטומציה מתבצעת במסגרת Accounts מתאימים. בניגוד ל-SQL Server בו כל הג’ובים מופיעים יחד ב-SSMS ללא חלוקה לסכימות או נושאים, כאן זה לא כך.וספות
יש ליצור את זה באופן חד פעמי, ובהמשך נוכל להשתמש בו לתזמון משימות נוספות.
במסך הראשי של Azure מחפשים ויוצרים:

image

image

לאחר שהוא נוצר נכנסים אליו,
ונתחיל ביצירת Credential (בתוך ה-Automation Account) שיכלול את ההרשאות לביצוע הפעולה.

יצירת Credential

Credential הוא שם משתמש קיים בעל הרשאות מתאימות, כדאי מאוד – אדמיניסטרטור וצפונה, והסיסמה שלו.
יוצרים אותו פעם אחת, ומשתמשים בו בהמשך למתן הרשאות למשימות שונוות.
image

יצירת RunBook

זהו לב המערכת: הקוד שנרצה להריץ.
ניצור קודם כל את האובייקט:
image

ונערוך אותו כדי להוסיף לו קוד PowerShell:
image

image

הקוד למעוניינים:

   1: $SqlCredential = Get-AutomationPSCredential -Name "GeriReshef"

   2:

   3: if ($SqlCredential -eq $null)

   4: {

   5:     throw "Could not retrieve '$SqlCredentialAsset' credential asset. Check that you created this first in the Automation service."

   6: }

   7:

   8: # Get the username and password from the SQL Credential

   9: $SqlUsername =$SqlCredential.UserName

  10: $SqlPass =$SqlCredential.GetNetworkCredential().Password

  11:

  12: # Define the connection to the SQL Database

  13: $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:teddicq7nm.database.windows.net,1433;Database=GeriReshefDB;uid=$SqlUsername;pwd=$SqlPass")

  14:

  15: # Open the SQL connection

  16: $Conn.Open()

  17:

  18: # Define the SQL command to run. In this case we are getting the number of rows in the table

  19: $Cmd=new-object system.Data.SqlClient.SqlCommand("Insert Into T_Log(Txt) Select 'RunBook2.1';", $Conn)

  20: $Cmd.CommandTimeout=0

  21:

  22: # Execute the SQL command

  23: $Ds=New-Object system.Data.DataSet

  24: $Da=New-Object system.Data.SqlClient.SqlDataAdapter($Cmd)

  25: [void]$Da.fill($Ds)

  26:

  27: # Output the count

  28: #$Ds.Tables.Column1

  29:

  30: # Close the SQL connection

  31: $Conn.Close()

יש לשנות את שם ה-Credential בשורה 1,

את שם השרת והדטבייס בשורה 13,

ואת פקודת ה-SQL בשורה 19.

שימו לב שלאחר כל עריכה ושינוי של הקוד, יש לשמור ולפאבלש (בפינה השמאלית העליונה).

בדיקה שהקוד רץ

במסך ה-RunBook לוחצים על Start ו..

image

ב-job status נראה הודעות משתנות לגבי מהלך הריצה עד שהיא נגמרת.

לאחר מכן ניתן ללחוץ על All Logs ולראות את הודעות השגיאה. הכלל הוא “no news is good news”. במקרה זה הריצה נגמרה בהצלחה ואין הודעות, אבל אם יש – קשה מאוד ללמוד מהן מה לא בסדר (ציינתי כבר שעדיף לשים ב-Credentials אדמיניסטרטור מורם מעם?)..

תזמון ה-RunBook בעזרת ה-Schedule

לוחצים במסך ה-RunBook על Schedule, ו-

image

בהגדרות בצד ימין ניתן לקבוע מתי ה-RunBook ירוץ.

אם בוחרים ב-Recur every week – נפתח מסך בו בוחרים ימים (אם רוצים לדלג למשל על סוף השבוע).

מעקב

אם רוצים לעקוב מתי ה-RunBook רץ והאם הצליח – נכנסים ל-Jobs (במסך ה-RunBook),

ומהרשימה ניתן להגיע למסך הריצה ולעיין בהודעות השגיאה (במקרה של תקלה).


כתיבת תגובה

האימייל לא יוצג באתר. (*) שדות חובה מסומנים

10 − 2 =