ผสานรวมโซลูชัน SaaS กับ Google Cloud Marketplace API โดยใช้ Producer Portal (Python)

1. บทนำ

โซลูชัน SaaS ใน Google Cloud Marketplace คือโซลูชันซอฟต์แวร์ที่ทำงานบนโครงสร้างพื้นฐานโดยไม่คำนึงถึงสถานที่ตั้ง แต่เรียกเก็บเงินโดย Google

ใน Codelab นี้ คุณจะได้ตั้งค่าโซลูชัน SaaS ขั้นพื้นฐานที่ผสานรวมกับ Google Cloud Marketplace เพื่อทำสิ่งต่อไปนี้

  • รับการแจ้งเตือนเมื่อผู้ใช้ลงชื่อสมัครใช้โซลูชันตัวอย่าง
  • อนุมัติลูกค้าที่ต้องการลงชื่อสมัครใช้ และเพิ่มลูกค้าลงในฐานข้อมูล
  • จัดการสถานการณ์ที่ลูกค้าต้องการเปลี่ยนหรือยกเลิกแพ็กเกจการเรียกเก็บเงิน
  • ส่งรายงานการใช้งานไปยัง Google

Codelab นี้จะช่วยให้คุณคุ้นเคยกับ API การจัดซื้อจัดจ้างและการควบคุมบริการของ Google Cloud Marketplace โปรดทราบว่าคู่มือนี้ไม่ได้ให้สภาพแวดล้อมผลิตภัณฑ์เต็มรูปแบบสำหรับการทดสอบ

2. ก่อนเริ่มต้น

  • ใช้พอร์ทัลผู้ผลิตเพื่อเปิดใช้ Codelab สำหรับโปรเจ็กต์ของคุณ หากยังไม่ได้เปิดใช้

ลิงก์โดยตรงไปยัง Producer Portal คือ

https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID

หากต้องการเปิดใช้ Codelab ให้คลิกเปิดใช้ในแผง Codelab ทางด้านขวาของหน้าจอ

  • ติดตั้ง Python 3 ในเครื่องของคุณพร้อมโมดูลต่อไปนี้
  • Python Google Client APIs
  • google-cloud-pubsubไลบรารีของไคลเอ็นต์

หากต้องการติดตั้งโมดูล Python ให้ใช้คำสั่งต่อไปนี้

pip install --upgrade google-api-python-client google-cloud-pubsub
  • โคลนหรือดาวน์โหลดที่เก็บ GitHub สำหรับ Codelab นี้โดยใช้คำสั่งต่อไปนี้
git clone https://github.com/googlecodelabs/gcp-marketplace-integrated-saas.git
cd gcp-marketplace-integrated-saas

  • ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_CLOUD_PROJECT เป็นรหัสของโปรเจ็กต์นี้
  • Linux:
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
  • Windows:
set GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_ID
  • ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางแบบเต็มไปยังไฟล์ที่ดาวน์โหลด
  • Linux:
export GOOGLE_APPLICATION_CREDENTIALS="[YOUR_MACHINE]/path/service-account-key.json"
  • Windows:
set GOOGLE_APPLICATION_CREDENTIALS=[YOUR_MACHINE]/path/service-account-key.json
  • หากต้องการดูโซลูชันตัวอย่างใน Google Cloud Marketplace ให้ไปที่พอร์ทัลผู้ผลิต แล้วคลิกผลิตภัณฑ์ Codelab ในแผง Codelab นอกจากนี้ คุณยังเข้าถึงโซลูชันได้โดยตรงที่ https://console.cloud.google.com/marketplace/product/DEMO-YOUR_PROJECT_ID/isaas-codelab
  • ใน Google Cloud Console ให้เปิดใช้ Partner Procurement API ในโปรเจ็กต์ใหม่

จากนั้นตั้งค่าแบ็กเอนด์สำหรับโซลูชันตัวอย่าง

3. การผสานรวมกับ Google Cloud Marketplace

ในระดับสูง คุณจะผสานรวมโซลูชันตัวอย่างกับ Google Cloud Marketplace ได้ด้วยวิธีต่อไปนี้

  • ผสานรวมกับ Cloud Pub/Sub เพื่อรับการแจ้งเตือนจาก Google Cloud Marketplace เช่น เมื่อผู้ใช้ลงชื่อสมัครใช้โซลูชันของคุณ วิศวกรพาร์ทเนอร์จะสร้างหัวข้อ Cloud Pub/Sub ที่คุณต้องสมัครใช้บริการเพื่อรับการแจ้งเตือน
  • ผสานรวมกับ Partner Procurement API เพื่อสร้างบัญชีสำหรับลูกค้าใหม่ คุณใช้ Partner Procurement API เพื่ออัปเดตบัญชีเมื่อผู้ใช้เลือก เปลี่ยน หรือยกเลิกแพ็กเกจการสมัครใช้บริการ หากต้องการผสานรวมกับ API คุณจะต้องสร้างไลบรารีไคลเอ็นต์ของคุณเอง
  • ผสานรวมกับ Service Control ของ Google เพื่อรายงานข้อมูลการใช้งาน

4. สมัครรับข้อมูลหัวข้อ Cloud Pub/Sub

เมื่อผู้ใช้เลือกแพ็กเกจการสมัครใช้บริการ คุณจะได้รับการแจ้งเตือนจาก Google Cloud Marketplace ผ่านหัวข้อ Cloud Pub/Sub

หากต้องการฟังข้อความในหัวข้อ Cloud Pub/Sub คุณต้องสร้างการสมัครใช้บริการก่อน

หากต้องการสร้างการสมัครใช้บริการ ให้ใช้สคริปต์ create_subscription.py

cd gcp-marketplace-integrated-saas/tools
python create_subscription.py

หากต้องการดูการสมัครใช้บริการ ให้เปิดแดชบอร์ด Cloud Pub/Sub ใน Cloud Console โดยทำดังนี้

https://console.cloud.google.com/cloudpubsub/subscriptions

ลองส่งคำขอสมัครใช้บริการทดสอบ

หากต้องการทดสอบแอปตัวอย่างนี้ในฐานะผู้ใช้ ให้เปิดผลิตภัณฑ์ Codelab ใน Marketplace โดยไปที่ https://console.cloud.google.com/marketplace/product/DEMO-YOUR_PROJECT_ID/isaas-codelab ตรวจสอบว่าคุณได้เลือกโปรเจ็กต์ Codelab แล้ว และเลือกแพ็กเกจการสมัครใช้บริการ

หากต้องการดูข้อความ Cloud Pub/Sub ที่ส่งเมื่อคุณเลือกแพ็กเกจ ให้ไปที่รูทของไดเรกทอรี python3 ในที่เก็บ แล้วเรียกใช้คำสั่งต่อไปนี้

~/gcp-marketplace-integrated-saas/python3$ python -m impl.step_1_pubsub.app

หากต้องการดูโค้ดตัวอย่างที่รอรับข้อความ Cloud Pub/Sub โปรดดู https://github.com/googlecodelabs/gcp-marketplace-integrated-saas/blob/master/python3/impl/step_1_pubsub/app.py

ในข้อความ Cloud Pub/Sub ฟิลด์ eventType จะแสดงสาเหตุที่ส่งข้อความ เมื่อเลือกแพ็กเกจ คุณควรเห็นข้อความสำหรับ eventType: ENTITLEMENT_CREATION_REQUESTED ซึ่งแสดงถึงแพ็กเกจการสมัครใช้บริการที่คุณเลือกไว้ก่อนหน้านี้

หากยกเลิกแพ็กเกจขณะที่สคริปต์นี้ทำงาน คุณจะเห็นข้อความใหม่สำหรับ eventType: ENTITLEMENT_CANCELLED

โปรดทราบว่าตัวอย่างข้างต้นไม่ได้ตอบรับข้อความ ซึ่งจะช่วยให้คุณทดสอบได้ง่ายขึ้นโดยการรับข้อความเดียวกันทุกครั้งที่เรียกใช้แอป

หากต้องการปิดสคริปต์ ให้กด CTRL + \

5. อนุมัติคำขอใช้บัญชี

ตอนนี้คุณรับข้อความจาก Google Cloud Marketplace ได้แล้ว คุณต้องเริ่มจัดการทรัพยากรที่บริการจัดซื้อจัดจ้างของ Google Cloud Marketplace สร้างในนามของลูกค้า

รายการแรกคือทรัพยากรบัญชี บัญชีแสดงถึงการเชื่อมต่อของลูกค้ากับผลิตภัณฑ์ของคุณ คุณต้องจัดเก็บรหัสบัญชีการจัดซื้อของลูกค้าไว้ในฐานข้อมูลเพื่อเชื่อมโยงความสัมพันธ์ระหว่างบัญชี Google ของลูกค้ากับบัญชีสำหรับบริการของคุณ

เมื่อลูกค้าเลือกแพ็กเกจ Google Cloud Marketplace จะส่งการแจ้งเตือน Cloud Pub/Sub ว่าลูกค้ากำลังขอสร้างบัญชี แอปของคุณต้องอนุมัติคำขอ ในโค้ดแล็บนี้ คุณจะอนุมัติคำขอของบัญชีเมื่อได้รับข้อความ Cloud Pub/Sub

สร้างฐานข้อมูลสำหรับข้อมูลบัญชี

สำหรับโค้ดแล็บนี้ เราจะใช้ฐานข้อมูล JSON แบบง่ายที่ติดตามบัญชีและการซื้อของลูกค้าได้

หากต้องการทดสอบตัวอย่างนี้ ให้สร้างไฟล์ที่มีออบเจ็กต์ JSON ว่างเปล่าที่ใดก็ได้ในเวิร์กสเตชัน

{}

ตั้งค่าตัวแปรสภาพแวดล้อม PROCUREMENT_CODELAB_DATABASE เป็นเส้นทางแบบเต็มไปยังไฟล์นี้

  • Linux:
export PROCUREMENT_CODELAB_DATABASE="YOUR_MACHINE/path/EMPTY_JSON_OBJECT.json"
  • Windows:
set PROCUREMENT_CODELAB_DATABASE=YOUR_MACHINE/path/EMPTY_JSON_OBJECT.json

โมดูลที่อ่านและเขียนฐานข้อมูลอยู่ใน python3/impl/database

การติดตั้งใช้งานตัวอย่างใช้สคีมาที่ขยายได้หากคุณผสานรวมข้อเสนอผลิตภัณฑ์มากกว่า 1 รายการกับ Google Cloud Marketplace ต่อไปนี้คือตัวอย่างรายการฐานข้อมูลสำหรับผู้ใช้ที่สมัครใช้แพ็กเกจ Very Good ในแอปตัวอย่าง

{
   "a2b3c4d5-b3f1-4dea-b134-generated_id":{
      "procurement_account_id":"generated-b3f1-4dea-b134-4a1d100c0335",
      "internal_account_id":"generated-45b7-4f4d-1bcd-2abb114f77de",
      "products":{
         "isaas-codelab":{
            "start_time":"2019-01-04T01:21:16.188Z",
            "plan_id":"very-good",
            "product_id":"isaas-codelab",
            "consumer_id":"project_number:123123345345"
         }
      }
   }
}

ในการติดตั้งใช้งานขั้นสุดท้าย คุณต้องเชื่อมต่อแอปกับฐานข้อมูลของคุณเองเพื่อลิงก์บัญชี Google Cloud Marketplace ของลูกค้ากับแหล่งข้อมูลลูกค้าของคุณเอง

การอนุมัติบัญชี

หากต้องการอนุมัติคำขอสร้างบัญชี ให้เรียกใช้คำสั่งต่อไปนี้

~/gcp-marketplace-integrated-saas/python3$ python3 -m impl.step_2_account.app

โค้ดตัวอย่างในการอนุมัติบัญชีอยู่ใน impl/step_2_account

การติดตั้งใช้งานตัวอย่างใช้คลาส Procurement ซึ่งจัดการการโต้ตอบกับ Procurement API โดยมีวิธีการ get_account() และ approve_account() ดังนี้

step_2_account/app.py

def _get_account_name(self, account_id):
    return 'providers/DEMO-{}/accounts/{}'.format(PROJECT_ID,
                                                  account_id)

def get_account(self, account_id):
    """Gets an account from the Procurement Service."""
    name = self._get_account_name(account_id)
    request = self.service.providers().accounts().get(name=name)
    try:
        response = request.execute()
        return response
    except HttpError as err:
        if err.resp.status == 404:
            return None

def approve_account(self, account_id):
    """Approves the account in the Procurement Service."""
    name = self._get_account_name(account_id)
    request = self.service.providers().accounts().approve(
        name=name, body={'approvalName': 'signup'})
    request.execute()

สำหรับ Codelab นี้ ในบริการจัดซื้อจัดจ้าง รหัสผู้ให้บริการคือ DEMO-YOUR_PROJECT_ID โดย YOUR_PROJECT_ID คือโปรเจ็กต์ที่คุณสร้างขึ้น ขณะโต้ตอบกับ Procurement API ชื่อบัญชีต้องใช้รูปแบบต่อไปนี้

providers/DEMO-YOUR_PROJECT_ID/accounts/account-id

จากนั้นอนุมัติการให้สิทธิ์ ซึ่งเป็นบันทึกการซื้อของลูกค้า

6. อนุมัติการให้สิทธิ์

เมื่อลูกค้าเลือกแพ็กเกจการสมัครใช้บริการใน Google Cloud Marketplace ระบบจะสร้างบัญชี จากนั้นจะสร้างคำขอสิทธิ์ใหม่ทันที การให้สิทธิ์แสดงถึงการซื้อบริการ ก่อนที่ลูกค้าจะเริ่มใช้บริการได้ คุณต้องอนุมัติคำขอสิทธิ์ แล้วตั้งค่าบริการเพื่อให้ลูกค้าเริ่มใช้งานได้

เมื่อแอปตัวอย่างได้รับข้อความ Cloud Pub/Sub ที่มี eventType ENTITLEMENT_CREATION_REQUESTED ระบบจะอนุมัติสิทธิ์ และแอปต้องรอข้อความ ENTITLEMENT_ACTIVE เพื่อบันทึกสิทธิ์ในฐานข้อมูล จากนั้นตั้งค่าทรัพยากรสำหรับลูกค้า

หากต้องการสร้างสิทธิ์ ให้เรียกใช้คำสั่งต่อไปนี้

~/gcp-marketplace-integrated-saas/python3$ python3 -m impl.step_3_entitlement_create.app

โค้ดเพื่ออนุมัติสิทธิ์อยู่ในการติดตั้งใช้งานตัวอย่าง

จากนั้นคุณจะจัดการกับกรณีที่ลูกค้าขอเปลี่ยนแพ็กเกจการสมัครใช้บริการ

7. อนุมัติการเปลี่ยนแปลงสิทธิ์

หากบริการมีหลายแพ็กเกจ คุณต้องจัดการคำขอจากลูกค้าที่อาจต้องการอัปเกรดหรือดาวน์เกรดแพ็กเกจที่มีอยู่

หากบริการมีแพ็กเกจเดียว ให้ข้ามไปที่จัดการการซื้อที่ยกเลิกแล้ว

การเปิดใช้งานสิทธิ์เป็นครั้งแรกและการเปิดใช้งานหลังจากเปลี่ยนแพ็กเกจไม่มีความแตกต่างกันในทางเทคนิค ด้วยเหตุนี้ การติดตั้งใช้งานตัวอย่างจึงมีเมธอด handleActiveEntitlement() ที่ใช้ร่วมกันสำหรับทั้ง 2 กรณี วิธีนี้จะตรวจสอบข้อความขาเข้าเพื่อหาเหตุการณ์ที่เกี่ยวข้องกับการให้สิทธิ์ ดังนี้

step_4_entitlement_change/app.py

def handleActiveEntitlement(self, entitlement, customer, accountId):
  """Updates the database to match the active entitlement."""

  product = {
      'product_id': entitlement['product'],
      'plan_id': entitlement['plan'],
  }

  if 'consumerId' in entitlement:
    product['consumer_id'] = entitlement['consumerId']

  customer['products'][entitlement['product']] = product

  self.db.write(accountId, customer)

ข้อมูลโค้ดต่อไปนี้จะตรวจสอบว่า eventType เป็น ENTITLEMENT_PLAN_CHANGE_REQUESTED หรือ ENTITLEMENT_PLAN_CHANGED หรือไม่

step_4_entitlement_change/app.py

elif eventType == 'ENTITLEMENT_PLAN_CHANGE_REQUESTED':
  if state == 'ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL':
    # Don't write anything to our database until the entitlement becomes
    # active within the Procurement Service.
    self.approveEntitlementPlanChange(id, entitlement['newPendingPlan'])
    return True

elif eventType == 'ENTITLEMENT_PLAN_CHANGED':
  if state == 'ENTITLEMENT_ACTIVE':
    # Handle an active entitlement after a plan change.
    self.handleActiveEntitlement(entitlement, customer, accountId)
    return True

ในการติดตั้งใช้งานขั้นสุดท้าย เมื่อสิทธิ์เปลี่ยนกลับไปเป็นสถานะ ENTITLEMENT_ACTIVE วิธีการ Listener ควรจะอัปเดตฐานข้อมูลเพื่อให้สอดคล้องกับการเปลี่ยนแปลงและทำการจัดสรรที่จำเป็น

บริการของคุณอาจไม่อนุญาตให้ดาวน์เกรดหรือยกเลิกจนกว่าจะสิ้นสุดรอบการเรียกเก็บเงิน ทั้งนี้ขึ้นอยู่กับวิธีที่คุณตั้งค่าผลิตภัณฑ์กับวิศวกรพาร์ทเนอร์ ในกรณีดังกล่าว การเปลี่ยนแพ็กเกจจะยังคงอยู่ในสถานะรอดำเนินการแม้หลังจากได้รับการอนุมัติแล้ว แต่สิทธิ์จะไม่กลับไปอยู่ในสถานะ ENTITLEMENT_ACTIVE จนกว่าการเปลี่ยนแพ็กเกจจะเสร็จสมบูรณ์

ดูโค้ดที่ตรวจสอบและอนุมัติการเปลี่ยนแปลงสิทธิ์ได้ที่การติดตั้งใช้งานตัวอย่าง

จากนั้นคุณจะจัดการกับกรณีที่ลูกค้ายกเลิกการซื้อ

8. จัดการการซื้อที่ยกเลิก

ลูกค้าอาจเลือกยกเลิกการซื้อ การยกเลิกอาจมีผลทันทีหรือเมื่อรอบการเรียกเก็บเงินสิ้นสุดลง ทั้งนี้ขึ้นอยู่กับวิธีที่คุณตั้งค่าผลิตภัณฑ์กับวิศวกรพาร์ทเนอร์

เมื่อลูกค้ายกเลิกการซื้อ ระบบจะส่งข้อความพร้อมeventType ENTITLEMENT_PENDING_CANCELLATION หากตั้งค่าผลิตภัณฑ์ให้ประมวลผลการยกเลิกทันที ระบบจะส่งข้อความที่มี eventType ENTITLEMENT_CANCELLED ในเร็วๆ นี้

step_5_entitlement_cancel/app.py

elif eventType == 'ENTITLEMENT_CANCELLED':
  # Clear out our records of the customer's plan.
  if entitlement['product'] in customer['products']:
    del customer['products'][entitlement['product']]

  ### TODO: Turn off customer's service. ###
  self.db.write(accountId, customer)
  return True

elif eventType == 'ENTITLEMENT_PENDING_CANCELLATION':
  # Do nothing. We want to cancel once it's truly canceled. For now it's
  # just set to not renew at the end of the billing cycle.
  return True

elif eventType == 'ENTITLEMENT_CANCELLATION_REVERTED':
  # Do nothing. The service was already active, but now it's set to renew
  # automatically at the end of the billing cycle.
  return True

บริการของคุณต้องรอข้อความ ENTITLEMENT_CANCELLED เพื่อนำสิทธิ์ออกจากฐานข้อมูล แล้วปิดบริการสำหรับลูกค้า

หลังจากยกเลิกสิทธิ์แล้ว ระบบจะลบสิทธิ์ดังกล่าวออกจากระบบของ Google และส่งข้อความพร้อมeventType ENTITLEMENT_DELETED ดังนี้

step_5_entitlement_cancel/app.py

elif eventType == 'ENTITLEMENT_DELETED':
  # Do nothing. Entitlements can only be deleted when they are already
  # cancelled, so our state is already up-to-date.
  return True

ดูโค้ดที่ยกเลิกสิทธิ์ได้ที่ตัวอย่างการติดตั้งใช้งาน

9. การส่งรายงานการใช้งาน

บริการบางอย่างมีคอมโพเนนต์ตามการใช้งาน ซึ่ง Google ต้องทราบการใช้งานบริการของลูกค้าเพื่อเรียกเก็บเงินจากลูกค้าในจำนวนที่ถูกต้อง บริการของคุณต้องรายงานการใช้งานผ่าน Google Service Control API

หากบริการของคุณไม่มีคอมโพเนนต์ตามการใช้งาน ให้ข้ามส่วนนี้

โปรดดูข้อมูลโดยละเอียดเกี่ยวกับการส่งรายงานการใช้งานในเอกสารประกอบเกี่ยวกับการเริ่มต้นใช้งาน

ควรส่งรายงานการใช้งานไปยัง Google Service Control API ทุกชั่วโมง ใน Codelab นี้ ระบบจะส่งรายงานโดยใช้สคริปต์ที่คุณตั้งเวลาเป็นงาน Cron ได้ สคริปต์จะจัดเก็บเวลาของรายงานการใช้งานล่าสุดในฐานข้อมูล และใช้เวลาดังกล่าวเป็นเวลาเริ่มต้นในการวัดการใช้งาน

สคริปต์จะตรวจสอบลูกค้าที่ใช้งานอยู่แต่ละรายของบริการ และส่งรายงานการใช้งานไปยังการควบคุมบริการของ Google โดยใช้ฟิลด์ consumer_id ของสิทธิ์ของลูกค้า จากนั้นสคริปต์จะอัปเดตรายการฐานข้อมูลของลูกค้าให้มี last_report_time ตั้งค่าเป็นเวลาสิ้นสุดของรายงานการใช้งานที่เพิ่งส่ง

การควบคุมบริการของ Google แสดงเมธอด 2 รายการ ได้แก่ check และ report โดยควรเรียกใช้ฟังก์ชันแรกก่อนฟังก์ชันที่สองเสมอ หากอดีตมีข้อผิดพลาดใดๆ ระบบควรปิดใช้บริการของลูกค้าจนกว่าจะแก้ไขได้

การใช้งานทั้งหมดสำหรับสิทธิ์ที่กำหนดจะถือว่ามาจาก usageReportingId รายการเดียว อย่างไรก็ตาม สำหรับผลิตภัณฑ์ SaaS การใช้งานนี้จะเชื่อมโยงกับรายการบรรทัด [Charges not specific to a project] ในการเรียกเก็บเงินของ Google Cloud หากผลิตภัณฑ์ SaaS ของคุณอาจมีการแชร์ในวงกว้างภายในองค์กรของลูกค้า และคุณต้องการรองรับการระบุแหล่งที่มาของต้นทุน เราขอแนะนำให้บริการทั้งหมดของคุณมีฟิลด์ userLabels ที่ไม่บังคับในรายงานการใช้งาน operation

Google Cloud Marketplace จะสงวนคีย์ป้ายกำกับ cloudmarketplace.googleapis.com/resource_name และ cloudmarketplace.googleapis.com/container_name ป้ายกำกับเหล่านี้มีไว้เพื่อบันทึกบริบทของการใช้งานภายในลำดับชั้นของบริการและทรัพยากรดั้งเดิม ชื่อที่ลูกค้ากำหนดให้กับทรัพยากรเหล่านี้จะรวมเป็นค่าป้ายกำกับในรายงานการใช้งาน เราขอแนะนำให้คุณรวมป้ายกำกับเหล่านี้ไว้ในรายงานการใช้งานโดยค่าเริ่มต้น

คีย์ป้ายกำกับ

ค่าของป้ายกำกับ

คำอธิบาย

cloudmarketplace.googleapis.com/resource_name

RESOURCE_NAME

ชื่อของทรัพยากรที่เชื่อมโยงกับเมตริกการใช้งาน

cloudmarketplace.googleapis.com/container_name

CONTAINER_NAME

ชื่อของคอนเทนเนอร์ทรัพยากร

ข้อมูลโค้ดต่อไปนี้จะรายงานการใช้งานสำหรับแอปเดโม และระบุแหล่งที่มาของการใช้งานผลิตภัณฑ์ SaaS ให้กับทรัพยากรที่ลูกค้ากำหนดชื่อว่า products_db สำหรับ Codelab นี้ service_name คือ isaas-codelab.mp-marketplace-partner-demos.appspot.com

operation = {
  'operationId': '<UUID>',
  'operationName': 'Codelab Usage Report',
  'consumerId': 'project_number:<Project Number>',
  'startTime': '<Timestamp>',
  'endTime': '<Timestamp>',
  'metricValues': [{
      'int64Value': 100,
  }],
  'userLabels': {
    'cloudmarketplace.googleapis.com/container_name': 'saas-storage-solutions',
    'cloudmarketplace.googleapis.com/resource_name': 'products_db'
  }
}

service.services().report(
    serviceName=service_name, body={
        'operations': [operation]
    }).execute()
product['last_report_time'] = end_time
database.write(customer_id, customer)

ดูโค้ดแบบเต็มได้ที่การติดตั้งใช้งานตัวอย่างของสคริปต์นี้ หากต้องการสร้างรายงานการใช้งานตัวอย่าง ให้เรียกใช้คำสั่งต่อไปนี้

~/gcp-marketplace-integrated-saas/python3$ python3 -m impl.step_6_usage_reporting.report isaas-codelab.mp-marketplace-partner-demos.appspot.com

10. ยินดีด้วย

คุณได้เรียนรู้วิธีผสานรวมโซลูชัน SaaS กับ Google Cloud Marketplace เพื่อจัดการบัญชีลูกค้าและสิทธิ์ รวมถึงรายงานการใช้งานเทียบกับบริการ ดูขั้นตอนการผสานรวมทั้งหมดได้ในเอกสารประกอบการผสานรวมแบ็กเอนด์

ล้างข้อมูล

หากไม่ต้องการใช้ทรัพยากรดังกล่าวอีกต่อไป ให้ลบทรัพยากรต่อไปนี้

  • การสมัครใช้บริการ Cloud Pub/Sub
  • บัญชีบริการและคีย์ของบัญชี
  • (ไม่บังคับ) โปรเจ็กต์ที่คุณสร้าง
  • บัญชีสำหรับการเรียกเก็บเงินที่คุณสร้าง (ไม่บังคับ)

ขั้นตอนถัดไป

ผสานรวมฟรอนท์เอนด์

ตัวอย่างใน Codelab นี้จะอนุมัติบัญชีและสิทธิ์โดยอัตโนมัติ ในทางปฏิบัติ คุณต้องนำลูกค้าไปยังหน้าลงชื่อสมัครใช้ที่คุณสร้าง ซึ่งลูกค้าจะสร้างบัญชีในระบบของคุณได้ หลังจากที่ผู้ใช้ลงชื่อสมัครใช้เรียบร้อยแล้ว คุณต้องส่งคำขอ API เพื่ออนุมัติบัญชีและสิทธิ์ของผู้ใช้

ดูข้อมูลเกี่ยวกับการผสานรวมฟรอนท์เอนด์ของแอปได้ในเอกสารประกอบของ Google Cloud Marketplace

ดูข้อมูลเพิ่มเติมเกี่ยวกับการให้บริการโซลูชัน SaaS

ดูภาพรวมของการให้บริการโซลูชัน SaaS ใน Google Cloud Marketplace ได้ที่การให้บริการโซลูชัน SaaS