הגדרת Lakehouse ללא גבולות ב-AWS Glue

במאמר הזה מוסבר איך להגדיר Lakehouse ללא גבולות כדי לשלוח שאילתות לנתונים מקטלוג AWS Glue ישירות ב- Google Cloud. היכולת הזו מאחדת את ניתוח הנתונים שלכם על ידי שילוב של מקורות נתונים חיצוניים עם סביבת Google Cloud העבודה הקיימת שלכם.

לאחר מכן, תוכלו להשתמש ב-Lakehouse for Apache Iceberg כדי לנהל את הגישה לנתונים המאוחדים.

לפני שמתחילים

  1. כדי להבין איך Lakehouse מנהל את הגישה לנתונים, כדאי לעיין בסקירה הכללית על Lakehouse.
  2. כדי להבין איך זה עובד, אפשר לקרוא את המאמר מידע על Lakehouse ללא גבולות.
  3. בודקים את הקטלוגים הנתמכים כדי לוודא שהפורמט של הטבלה עומד בדרישות ושההגדרות נתמכות.
  4. צריך לוודא שלאדמין ב-AWS יש הרשאות ליצור תפקידים ב-IAM ולהגדיר כללי מדיניות בנושא הרשאות.
  5. אופציונלי: אם אתם מתכננים לנתב שאילתות דרך חיבור פרטי בין ה-VPC שלכם לבין ה-VPC של ספק הענן המרוחק (לדוגמה, AWS), אתם צריכים לוודא שיש לכם חשבון פעיל אצל הספק המרוחק, להקצות חיבור ייעודי בין עננים או חיבור בין עננים של שותף, ליצור סשנים של BGP עם Cloud Router ולוודא שיש לכם את הרשאות ה-IAM הנדרשות בשתי סביבות הענן. Google Cloud
  6. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להגדרת Lakehouse ללא גבולות, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

מגבלות ושיקולים

בקטע הזה מפורטות המגבלות והשיקולים לשימוש ב-Lakehouse ללא גבולות.

  • ספקי ענן נתמכים: אפשר להשתמש בחיבור פרטי בין רשתות עם Lakehouse ללא גבולות עם ספקי הענן המרוחקים הבאים: Amazon Web Services‏ (AWS). אפשר להשתמש ב-Dedicated Cross-Cloud Interconnect או ב-Partner Cross-Cloud Interconnect.
  • ניתוב ברשת: אם לא מוגדר חיבור פרטי (כמו Dedicated CCI או Partner CCI), השאילתות מנותבות דרך האינטרנט הציבורי. התוצאה יכולה להיות עלויות גבוהות יותר של העברת נתונים מספק הענן המרוחק וביצועים פחות צפויים.
  • עדכניות הנתונים: הדגל --refresh-interval בקטלוג המאוחד קובע את תדירות הסנכרון של המטא-נתונים. מרווח קצר יותר מספק נתונים עדכניים יותר, אבל עלול לגרום לעלויות נוספות ב-API של ספק הקטלוג המרוחק.
  • דיווח על מדדי Iceberg: דיווח על מדדי Iceberg לא זמין לקטלוגים מאוחדים. כשניגשים לקטלוג מאוחד, מגדירים את המאפיין rest-metrics-reporting-enabled לערך false בלקוח Iceberg.

תהליך עבודה כללי

כדי להגדיר ולהשתמש ב-Lakehouse ללא גבולות, צריך לבצע את השלבים הכלליים הבאים:

  • הגדרת Cross-Cloud Interconnect (אופציונלי): הגדרת חיבור פרטי בין Google Cloud ה-VPC שלכם לבין ספק הענן המרוחק.
  • הגדרת איחוד: הגדרת אימות על ידי יצירת תפקיד IAM עם מדיניות אמון של placeholder אצל הספק המרוחק. לאחר מכן, יוצרים קטלוג מאוחד ב-Lakehouse ומעדכנים את מדיניות ההרשאות.
  • בדיקת החיבור: מוודאים ש-Lakehouse יכול להתחבר בהצלחה לקטלוג המרוחק.
  • הפעלת שאילתות על נתונים: אפשר להריץ שאילתות על הנתונים המאוחדים באמצעות BigQuery או Managed Service for Apache Spark. מידע נוסף זמין במאמר בנושא שימוש ב-Lakehouse ללא גבולות.
  • הגדרת הרשאות: משתמשים ב-IAM כדי לנהל את האנשים שיכולים לצפות בנתונים המאוחדים ולשאול עליהם שאילתות.

הגדרה של Cross-Cloud Interconnect (אופציונלי)

שאילתות לקטלוג המרוחק עוברות באינטרנט הציבורי כברירת מחדל. כדי לשפר את האבטחה והתאימות, לספק ביצועים צפויים ולהפחית את עלויות העברת הנתונים, מומלץ להשתמש בחיבור פרטי בין רשתות. החיבור הזה יוצר חיבור רשת פרטי ייעודי בין הענן הווירטואלי הפרטי (VPC) שלכם לבין הרשת של ספק הענן המרוחק (לדוגמה, AWS). Google Cloud

אפשר להקצות ולהגדיר את אחת מהאפשרויות הבאות של חיבור פרטי בין ה-VPC שלכם לבין ה-VPC של ספק הענן המרוחק (לדוגמה, AWS): Google Cloud

כדי להבטיח החלפת מסלולים, צריך ליצור סשנים של BGP בין Cloud Router ב- Google Cloud לבין VPC של ספק הענן המרוחק.

כדי להפעיל שאילתות פרטיות, צריך להגדיר נתיב מ-Lakehouse לקטגוריית האחסון המרוחקת (לדוגמה, קטגוריית AWS Amazon S3) דרך הקישור הפרטי. יש שני תרשימי זרימה של ארכיטקטורה שאפשר להיעזר בהם כדי להגדיר את הניתוב הזה:

  • ניתוב של מאזן עומסים אזורי פנימי מסוג Network Load Balancer: בתרשים הזה נעשה שימוש במאזן עומסים אזורי פנימי מסוג Network Load Balancer כדי להפיץ בקשות בין קבוצות של נקודות קצה (NEG) ברשתות היברידיות שמפנות לממשקי רשת אלסטיים (ENI) רבים של AWS.Google Cloud התהליך הזה חיוני לאיזון עומסים, למדרגיות ולזמינות גבוהה. הוא נדרש ל-CCI של שותפים ומומלץ ל-CCI ייעודי לצורך איזון עומסים, יכולת הרחבה וזמינות גבוהה.
  • ניתוב ישיר של נקודת קצה (endpoint): בתרשים הזה, Service Directory מתחבר ישירות לכתובת IP אחת של נקודת קצה (endpoint) של ממשק AWS VPC. התהליך הזה פועל רק עם CCI ייעודי, ולא עם CCI של שותפים.

בוחרים את תהליך ההגדרה שמתאים לדרישות הארכיטקטורה שלכם:

מאזן עומסי רשת פנימי אזורי בשרת proxy

כדי להגדיר מאזן עומסי רשת פנימי אזורי של שרת proxy לחלוקת בקשות בין כמה ממשקי רשת של AWS לזמינות גבוהה ולאיזון עומסים, פועלים לפי השלבים הבאים:

הגדרת רשתות ב-AWS

קודם יוצרים נקודת קצה של ממשק Amazon S3 VPC ‏ (AWS PrivateLink):

  1. במסוף AWS VPC, יוצרים נקודת קצה של ממשק עבור Amazon S3.
  2. בשם השירות, מציינים com.amazonaws.AWS_REGION.s3.
  3. בוחרים את ה-VPC ואת רשתות המשנה שמחוברים דרך Direct Connect אל ה-VPC שלכם ב- Google Cloud Google Cloud.
  4. מצרפים קבוצות אבטחה לנקודת הקצה כדי לשלוט בגישה הנכנסת.
  5. הפעולה הזו מקצה ממשקים של AWS Elastic Network Interface (ENI) לכל רשת משנה שנבחרה. שימו לב לכתובות ה-IP הפרטיות של ממשקי הרשת האלה.

עכשיו מגדירים קבוצות אבטחה:

  • מוודאים שקבוצת האבטחה או קבוצות האבטחה שמצורפות לנקודת הקצה של Amazon S3 ENI מאפשרות תעבורת TCP נכנסת ביציאה 443מ-VPC Google Cloud . היא צריכה לכלול את טווח ה-CIDR של תת-הרשת של שרת ה-proxy בלבד, כדי לאפשר בדיקות תקינות ותעבורה מועברת.Google Cloud

הגדרה של Google Cloud רשתות

כדי לפשט את ההגדרה, מריצים את הפקודות הבאות כדי להגדיר את מאזן העומסים הפנימי. הוראות להגדרות מתקדמות או פרטים נוספים זמינים במאמר הגדרת מאזן עומסים פנימי אזורי של רשת לנקודות קצה היברידיות.

gcloud compute networks subnets create PROXY_SUBNET_NAME \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK \
    --range=PROXY_SUBNET_RANGE

מחליפים את מה שכתוב בשדות הבאים:

  • PROXY_SUBNET_NAME: שם לתת-הרשת של ה-proxy בלבד.
  • PROXY_SUBNET_RANGE: טווח CIDR שלא נמצא בשימוש ברשת ה-VPC (לדוגמה, 10.129.0.0/23).
  1. יוצרים בדיקת תקינות אזורית:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
        --region=REGION \
        --port=443

    מחליפים את מה שכתוב בשדות הבאים:

    • HEALTH_CHECK_NAME: שם לבדיקת תקינות.
    • REGION: האזור Google Cloud (לדוגמה, us-east4).
  2. יצירה של קבוצות היברידיות של נקודות קצה ברשת (NEG) והוספה של נקודות קצה:

    יוצרים קבוצת נקודות קצה ברשת היברידית (NON_GCP_PRIVATE_IP_PORT) לכל אזור:

    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ZONE \
        --network=VPC_NETWORK

    מוסיפים את כתובת ה-IP הפרטית של ה-ENI ב-AWS ל-NEG ההיברידי המתאים:

    gcloud compute network-endpoint-groups update NEG_NAME \
        --zone=ZONE \
        --add-endpoint="ip=AWS_S3_IP,port=443"

    מחליפים את מה שכתוב בשדות הבאים:

    • NEG_NAME: שם ל-NEG ההיברידי.
    • ZONE: האזור (לדוגמה, us-east4-a). האזור הזה צריך להיות באזור של הצירוף ל-VLAN של Cross-Cloud Interconnect. Google Cloud
    • VPC_NETWORK: השם של רשת ה-VPC
    • AWS_S3_IP: כתובת ה-IP הפרטית של נקודת הקצה (ENI) של AWS Amazon S3 VPC באזור הזה.

    אם ממשקי ה-ENI של AWS מפוזרים על פני כמה אזורים, חוזרים על הפקודות האלה כדי ליצור קבוצות NEG ולהוסיף נקודות קצה לאזורים אחרים.

  3. יוצרים ומגדירים את שירות הקצה העורפי:

    יצירת שירות אזורי לקצה העורפי עם איזון עומסים פנימי מנוהל:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=TCP \
        --region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --health-checks-region=REGION

    מוסיפים את קבוצות ה-NEG ההיברידיות לשירות העורפי:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --region=REGION \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-zone=ZONE \
        --balancing-mode=CONNECTION \
        --max-connections=MAX_CONNECTIONS

    מחליפים את מה שכתוב בשדות הבאים:

    • BACKEND_SERVICE_NAME: שם לשירות הקצה העורפי.
    • NEG_NAME: השם של ה-NEG ההיברידי שיצרתם בשלב הקודם.
    • ZONE: האזור (לדוגמה, us-east4-a). Google Cloud
    • MAX_CONNECTIONS: מספר החיבורים המקסימלי בו-זמנית שהקצה העורפי צריך לטפל בהם (לדוגמה, 100).

    חוזרים על הפקודה add-backend לכל NEG היברידי שיצרתם.

  4. מגדירים את הקצה הקדמי של מאזן העומסים:

    יוצרים שרת proxy של TCP ביעד:

    gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --region=REGION

    יוצרים כלל העברה לניתוב תנועה לשרת ה-Proxy של היעד:

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=VPC_NETWORK \
        --subnet=VPC_SUBNET \
        --ports=443 \
        --region=REGION \
        --target-tcp-proxy=TARGET_PROXY_NAME \
        --target-tcp-proxy-region=REGION \
        --allow-global-access

    מחליפים את מה שכתוב בשדות הבאים:

    • TARGET_PROXY_NAME: שם לשרת ה-proxy של היעד.
    • FORWARDING_RULE_NAME: שם לכלל ההעברה.
    • VPC_SUBNET: השם של רשת המשנה של ה-VPC.

אחרי שיוצרים את כלל ההעברה למאזן העומסים, רושמים את כתובת ה-IP הפנימית שהוקצתה לו. זה ILB_IP_ADDRESS שלך.

הגדרת Service Directory

רושמים את כתובת ה-IP של ILB בספריית השירותים, כדי ש-Lakehouse יוכל לגלות אותה.

  1. יוצרים מרחב שמות לענן המרוחק:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    מחליפים את מה שכתוב בשדות הבאים:

    • NAMESPACE: מזהה ייחודי של מרחב השמות.
    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • REGION: Google Cloud האזור. לדוגמה, us-east4. האזור הזה צריך להיות זהה לאזור של הקטלוג המאוחד.
  2. יוצרים שירות במרחב השמות של Service Directory:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE_NAME: מזהה ייחודי של השירות.
  3. יוצרים נקודת קצה עבור איזון העומסים הפנימי בשירות:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --project=PROJECT_ID \
        --namespace=NAMESPACE \
        --service=SERVICE_NAME \
        --location=REGION \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \
        --address=ILB_IP_ADDRESS \
        --port=443

    מחליפים את מה שכתוב בשדות הבאים:

    • ENDPOINT_NAME: מזהה ייחודי של נקודת הקצה.
    • PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud. משתמשים במספר הפרויקט בדגל --network.
    • ILB_IP_ADDRESS: כתובת ה-IP הפנימית של כלל ההעברה של איזון העומסים הפנימי.

נקודת קצה ישירה

כדי להגדיר את Service Directory להעברת תנועה ישירות לכתובת IP אחת של נקודת קצה של ממשק VPC ב-AWS, צריך לבצע את השלבים הבאים:

  1. יוצרים נקודת קצה של ממשק VPC עבור Amazon S3 בתוך ה-VPC של AWS. שימו לב לכתובת ה-IP ולפורט של נקודת הקצה הזו.
  2. יוצרים מרחב שמות לענן המרוחק:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    מחליפים את מה שכתוב בשדות הבאים:

    • NAMESPACE: מזהה ייחודי של מרחב השמות.
    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • REGION: Google Cloud האזור. לדוגמה, us-east4. האזור הזה צריך להיות זהה לאזור של הקטלוג המאוחד.
  3. יוצרים שירות במרחב השמות של Service Directory:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE_NAME: מזהה ייחודי של השירות.
  4. יוצרים נקודת קצה בשירות שמכילה את פרטי הניתוב של נקודת הקצה של ממשק Amazon S3 VPC:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --service=SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION \
        --address=S3_VPCE_IP_ADDRESS \
        --port=S3_VPCE_PORT \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK

    מחליפים את מה שכתוב בשדות הבאים:

    • ENDPOINT_NAME: מזהה ייחודי של נקודת הקצה.
    • S3_VPCE_IP_ADDRESS: כתובת ה-IP של נקודת הקצה של ממשק ה-VPC של Amazon S3. לדוגמה, 10.0.1.45.
    • S3_VPCE_PORT: מספר היציאה של נקודת הקצה של ממשק ה-VPC של Amazon S3. לדוגמה, 443.
    • PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud. משתמשים במספר הפרויקט בדגל --network.
    • VPC_NETWORK: השם של רשת ה-VPC שמשויכת לחיבור הפרטי של Interconnect. Google Cloud

הגדרת איחוד

כדי לשלוח שאילתות על הנתונים, צריך להגדיר קטלוג מאוחד של Lakehouse שמתחבר לקטלוג AWS המרוחק.

יצירת תפקיד AWS IAM עם מדיניות אמון של placeholder

אחרי יצירת קטלוג, Lakehouse מקצה מזהה של חשבון שירות ב-Google. יוצרים את תפקיד AWS IAM עם מדיניות אמון של placeholder.

  1. יוצרים קובץ בשם trust_policy.json:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:aud": [
                "PLACEHOLDER_VALUE"
              ],
              "accounts.google.com:sub": [
                "PLACEHOLDER_VALUE"
              ]
            }
          }
        }
      ]
    }
  2. מריצים את הפקודה של AWS CLI כדי ליצור את התפקיד עם מדיניות האמון של ה-placeholder. מומלץ להגדיר את משך הסשן המקסימלי ל-12 שעות (43200 שניות) כדי למנוע את פקיעת התוקף של פרטי הכניסה במהלך משימות ארוכות:

    aws iam create-role \
      --role-name AWS_ROLE_NAME \
      --assume-role-policy-document file://trust_policy.json \
      --max-session-duration 43200

    מחליפים את מה שכתוב בשדות הבאים:

    • AWS_ROLE_NAME: שם לתפקיד AWS IAM. לדוגמה, lakehouse_glue_federation_role.

צירוף מדיניות הרשאות

מצרפים מדיניות הרשאות לתפקיד IAM שמאפשרת ל-Lakehouse לגשת ל-Glue Data Catalog ול-S3 buckets באזור AWS. המדיניות הזו גם מעניקה גישה לקטגוריות של טבלאות S3 אם משתמשים בשילוב של טבלאות S3 ב-AWS Lake Formation. אם שדרגתם מהרשאות ברירת המחדל של נתוני AWS Glue למודל AWS Lake Formation, יכול להיות שתצטרכו להעניק הרשאות נוספות ב-Lake Formation במקום זאת.

  1. יוצרים קובץ בשם permissions_policy.json עם הגדרות המדיניות הבאות.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "GlueRead",
          "Effect": "Allow",
          "Action": [
            "glue:GetCatalog",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:GetTable",
            "glue:GetTables"
          ],
          "Resource": "arn:aws:glue:AWS_REGION:AWS_ACCOUNT_ID:*"
        },
        {
          "Sid": "S3Read",
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket",
            "s3:GetObject"
          ],
          "Resource": [
            "arn:aws:s3:::*"
          ]
        },
        {
          "Sid": "S3TablesRead",
          "Effect": "Allow",
          "Action": [
            "s3tables:GetTableBucket",
            "s3tables:ListNamespaces",
            "s3tables:GetNamespace",
            "s3tables:ListTables",
            "s3tables:GetTable",
            "s3tables:GetTableMetadataLocation",
            "s3tables:GetTableData"
          ],
          "Resource": [
            "arn:aws:s3tables:AWS_REGION:AWS_ACCOUNT_ID:*"
          ]
        }
      ]
    }

    אם אתם משתמשים במפתחות בניהול הלקוח שמתארחים ב-AWS Key Management Service‏ (KMS) כדי להצפין משאבים של AWS Glue,‏ Amazon S3 או Amazon S3 Tables, אתם צריכים להוסיף הצהרה שמעניקה גישה למפתח KMS כדי לפענח את המשאבים:

    # ...
    {
      "Sid": "GlueS3S3TablesKmsDecrypt",
      "Effect": "Allow",
      "Action": [
          "kms:Decrypt"
      ],
      "Resource": [
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_glue",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3_tables"
      ]
    }
    # ...
  2. מצרפים את מדיניות ההרשאות הזו לתפקיד ה-IAM:

    aws iam put-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-name AWS_POLICY_NAME \
      --policy-document file://permissions_policy.json

    מחליפים את מה שכתוב בשדות הבאים:

    • AWS_ROLE_NAME: השם של תפקיד ה-IAM ב-AWS. לדוגמה, lakehouse_glue_federation_role.
    • AWS_POLICY_NAME: שם למדיניות ההרשאות. לדוגמה, lakehouse_glue_federation_policy.
    • AWS_REGION: האזור ב-AWS שבו נמצא קטלוג Glue או טבלאות S3. לדוגמה, us-east-1.
    • AWS_ACCOUNT_ID: מחרוזת המזהה של חשבון AWS שלכם, שמורכבת מ-12 ספרות. לדוגמה, 123456789012.

יצירת קטלוג מאוחד

מקימים את הקטלוג המאוחד ב- Google Cloud באמצעות המסוף Google Cloud , gcloud CLI או API בארכיטקטורת REST.

כדי למנוע כשלים מוקדמים ברענון המטא-נתונים ברקע בזמן שהקשרים של אמון ב-AWS מתפשטים, צריך לאתחל את הקטלוג בלי לציין לוח זמנים לרענון (ברירת המחדל היא 0s).

המסוף

כדי ליצור קטלוג מאוחד:

  1. במסוף Google Cloud , עוברים אל Lakehouse.

    מעבר אל Lakehouse

  2. לוחצים על Create catalog (יצירת קטלוג).

  3. לוחצים על קטלוג מאוחד.

    יופיעו הפרטים של הגדרת הקטלוג.

  4. בשדה מקור קטלוג מאוחד, בוחרים באפשרות AWS Glue.

  5. בשדה Data location, בוחרים את האזור של Lakehouse שבו רוצים ליצור את הקטלוג המאוחד. לדוגמה, us-east4. כדי לצמצם את זמן האחזור (גם באינטרנט ציבורי), בוחרים את Google Cloud האזור הכי קרוב לאזור AWS שלכם.

  6. לוחצים על Continue.

    יוצגו הפרטים של פרטי החיבור.

  7. בקטע פרטים של קטלוג מרוחק, בשדה מחסן נתונים ב-AWS, מזינים את מזהה החשבון ב-AWS או את הקטלוג של קטגוריית טבלאות S3. לדוגמה: 123456789012.

  8. בשדה AWS region (אזור AWS), מזינים את אזור AWS. לדוגמה: us-east-1.

  9. בשדה AWS role ARN (מספר זיהוי משאב של תפקיד ב-AWS), מזינים את מספר הזיהוי משאב של התפקיד ב-AWS. צריך להשתמש בפורמט הבא: arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME.

  10. אופציונלי: בשדה Service directory name, מזינים את הנתיב לנקודת הקצה או לשירות של Service Directory. הפעולה הזו נדרשת רק אם אתם מגדירים חיבור פרטי (Cross-Cloud Interconnect).

  11. לוחצים על יצירה.

Google Cloud CLI

אינטרנט ציבורי (ללא CCI)

אם לא מגדירים CCI, החיבור עובר בצורה מאובטחת דרך האינטרנט הציבורי.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="glue" \
    --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \
    --glue-aws-region="AWS_REGION" \
    --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME"

בבעלות הלקוח (CCI)

אם הגדרתם חיבור פרטי (כמו Dedicated CCI או Partner CCI), צריך לספק את הפניה לשירות Service Directory כדי לוודא ש-Lakehouse ינתב את התנועה באופן פרטי.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="glue" \
    --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \
    --glue-aws-region="AWS_REGION" \
    --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"

REST

curl -s -X POST \
  -H "x-goog-user-project: PROJECT_ID" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION" \
  -d '{
    "catalog_type": "CATALOG_TYPE_FEDERATED",
    "storage_regions": ["'"REGION"'"],
    "federated_catalog_options": {
      "glue_catalog_info": {
        "warehouse": "'"GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE"'",
        "aws_region": "'"AWS_REGION"'",
        "aws_role_arn": "arn:aws:iam::'"AWS_ACCOUNT_ID"':role/'"AWS_ROLE_NAME"'"
      }
    }
  }'

מחליפים את מה שכתוב בשדות הבאים:

  • FEDERATED_CATALOG_NAME: שם לקטלוג המאוחד.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • REGION: האזור של Lakehouse שבו נוצר הקטלוג המאוחד. לדוגמה, us-east4.
  • GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE: מזהה קטלוג מחסן הנתונים שלכם. בשביל Glue Data Catalog באזור AWS, מזינים את מחרוזת מזהה חשבון AWS שמורכבת מ-12 ספרות. לדוגמה, 123456789012. כדי להשתמש בדלי של טבלת S3 באזור, מזינים את הפקודה AWS_ACCOUNT_ID:s3tablescatalog/S3_TABLE_BUCKET. לדוגמה, 123456789012:s3tablescatalog/my-table-bucket.
  • AWS_ACCOUNT_ID: מחרוזת המזהה של חשבון AWS שלכם, שמורכבת מ-12 ספרות. לדוגמה, 123456789012.
  • AWS_REGION: האזור ב-AWS שבו נמצא קטלוג Glue או קטגוריית הטבלה ב-S3. לדוגמה, us-east-1.
  • AWS_ROLE_NAME: השם של תפקיד ה-IAM ב-AWS. לדוגמה, lakehouse_glue_federation_role.
  • NAMESPACE: (אופציונלי) מרחב השמות של Service Directory שיצרתם במהלך ההגדרה של קישוריות פרטית.
  • SERVICE_NAME: (אופציונלי) שם השירות של Service Directory שיצרתם במהלך ההגדרה של קישוריות פרטית.

עדכון מדיניות האמון

כשיוצרים את הקטלוג, Lakehouse מקצה לו חשבון שירות ייחודי, שמוחזר כשדה biglake-service-account-id בתגובה ליצירת הקטלוג. משתמשים בחשבון השירות הזה כדי ליצור את יחסי האמון.

  1. מריצים את הפקודה הבאה כדי לחלץ את הערך biglake-service-account-id למשתנה bash פעיל:

    LAKEHOUSE_SA_ID=$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --format="value(biglake-service-account-id)")
  2. מעדכנים את מדיניות ההרשאות של תפקיד AWS IAM כדי להחליף את ה-placeholder במזהה של סוכן שירות Google המאומת. בלוק התנאי מאמת את ההתאמה של sub ושל aud. כותבים את המדיניות לקובץ בשם trust_policy_comprehensive.json:

    cat > trust_policy_comprehensive.json << EOF
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:aud": [
                "$LAKEHOUSE_SA_ID"
              ],
              "accounts.google.com:sub": [
                "$LAKEHOUSE_SA_ID"
              ]
            }
          }
        }
      ]
    }
    EOF
  3. מחילים את המדיניות הסופית על התפקיד ב-AWS:

    aws iam update-assume-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-document file://trust_policy_comprehensive.json

הפעלה של רענון מטא-נתונים ברקע

עכשיו, אחרי שיצרתם בהצלחה יחסי אמון מאובטחים בשתי הפלטפורמות, אתם יכולים לעדכן את הקטלוג כדי להפעיל רענון של המטא-נתונים ברקע (כל 5 דקות או 300s, או יותר).

‫CLI של gcloud

gcloud alpha biglake iceberg catalogs update FEDERATED_CATALOG_NAME \
  --project="PROJECT_ID" \
  --refresh-interval="300s"

REST

curl -s -X PATCH \
-H "x-goog-user-project: PROJECT_ID" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME?updateMask=federated_catalog_options.refresh_options.refresh_schedule" \
-d '{
  "federated_catalog_options": {
    "refresh_options": {
      "refresh_schedule": {
        "refresh_interval": "300s"
      }
    }
  }
}'

השלמת ההגדרה של חיבור פרטי (רק Cross-Cloud Interconnect)

אם אתם מעבירים תנועה דרך חיבור פרטי (Dedicated Interconnect או Partner Interconnect), אתם צריכים להעניק לחשבון השירות של קטלוג Lakehouse הרשאות לגילוי ולאישור חיבורים דרך Service Directory.

המסוף

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM

  2. לוחצים על הענקת גישה (או על הוספה).

  3. בשדה New principals, מזינים את כתובת האימייל של חשבון השירות של קטלוג Lakehouse. אפשר לאחזר את האימייל הזה על ידי תיאור הקטלוג (ראו את הכרטיסייה gcloud).

  4. בתפריט הנפתח Role, בוחרים באפשרות Service Directory Viewer (roles/servicedirectory.viewer).

  5. לוחצים על Add another role ובוחרים באפשרות Service Directory PSC Authorized Service (roles/servicedirectory.pscAuthorizedService).

  6. לוחצים על Save.

‫CLI של gcloud

מקצים לחשבון השירות של הקטלוג את התפקידים הנדרשים:

# Grant Service Directory Viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.viewer"

# Grant Service Directory PSC Authorized Service
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.pscAuthorizedService"

אימות החיבור

מוודאים שמחזור הרענון של המטא-נתונים ברקע של הקטלוג הושלם בהצלחה ומרחבי השמות מסונכרנים.

  1. מוודאים שסטטוס הרענון מציין שהפעולה הצליחה:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID"
  2. מוודאים שמסדי נתונים מרוחקים מופיעים כמרחבי שמות מסונכרנים:

    gcloud alpha biglake iceberg namespaces list \
      --project="PROJECT_ID" \
      --catalog="FEDERATED_CATALOG_NAME"

המאמרים הבאים