ดำเนินการเขียนกลับฐานข้อมูลที่ปลอดภัยด้วย Amazon QuickSight

ดำเนินการเขียนกลับฐานข้อมูลที่ปลอดภัยด้วย Amazon QuickSight

โหนดต้นทาง: 2641420

อเมซอน QuickSight เป็นโซลูชันระบบข่าวกรองธุรกิจ (BI) ที่ขับเคลื่อนด้วยการเรียนรู้ของเครื่อง (ML) ที่ปรับขนาดได้ ไร้เซิร์ฟเวอร์ ซึ่งทำให้ง่ายต่อการเชื่อมต่อกับข้อมูลของคุณ สร้างแดชบอร์ดแบบโต้ตอบ เข้าถึงข้อมูลเชิงลึกที่เปิดใช้งาน ML และแบ่งปันภาพและแดชบอร์ดกับคนนับหมื่น ของผู้ใช้ภายในและภายนอก ทั้งภายใน QuickSight เองหรือฝังอยู่ในแอปพลิเคชันใดๆ

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

ภาพรวมกรณีใช้งาน

เพื่อสาธิตวิธีเปิดใช้ความสามารถในการเขียนกลับด้วย QuickSight ลองพิจารณาบริษัทสมมุติ AnyCompany Inc. AnyCompany เป็นบริษัทบริการระดับมืออาชีพที่เชี่ยวชาญในการจัดหาโซลูชันด้านแรงงานให้กับลูกค้า AnyCompany ระบุว่าการเรียกใช้ปริมาณงานในระบบคลาวด์เพื่อรองรับความต้องการทางธุรกิจทั่วโลกที่กำลังเติบโตนั้นเป็นข้อได้เปรียบในการแข่งขัน และใช้ระบบคลาวด์เพื่อโฮสต์ปริมาณงานทั้งหมด AnyCompany ตัดสินใจที่จะปรับปรุงวิธีที่สาขาของตนเสนอราคาให้กับลูกค้า ปัจจุบัน สาขาต่าง ๆ สร้างใบเสนอราคาของลูกค้าด้วยตนเอง และเป็นก้าวแรกในเส้นทางนวัตกรรมนี้ AnyCompany กำลังมองหาการพัฒนาโซลูชันระดับองค์กรสำหรับการสร้างใบเสนอราคาของลูกค้าด้วยความสามารถในการใช้ข้อมูลราคาท้องถิ่นแบบไดนามิกในขณะที่สร้างใบเสนอราคา

AnyCompany ใช้อยู่ในปัจจุบัน อเมซอน Redshift เป็นแพลตฟอร์มคลังข้อมูลขององค์กร และ QuickSight เป็นโซลูชัน BI

การสร้างโซลูชันใหม่มาพร้อมกับความท้าทายต่อไปนี้:

  • AnyCompany ต้องการโซลูชันที่ง่ายต่อการสร้างและบำรุงรักษา และไม่ต้องการลงทุนในการสร้างอินเทอร์เฟซผู้ใช้แยกต่างหาก
  • AnyCompany ต้องการขยายขีดความสามารถของแดชบอร์ด QuickSight BI ที่มีอยู่ เพื่อเปิดใช้งานการสร้างใบเสนอราคาและการยอมรับใบเสนอราคา ซึ่งจะทำให้การเปิดตัวฟีเจอร์ง่ายขึ้น เนื่องจากพนักงานของพวกเขาใช้แดชบอร์ด QuickSight อยู่แล้ว และเพลิดเพลินกับอินเทอร์เฟซที่ใช้งานง่ายที่ QuickSight มอบให้
  • AnyCompan ต้องการจัดเก็บประวัติการเจรจาใบเสนอราคาที่รวมถึงใบเสนอราคาที่สร้าง ตรวจสอบ และยอมรับ
  • AnyCompany ต้องการสร้างแดชบอร์ดใหม่ที่มีข้อมูลประวัติใบเสนอราคาสำหรับการวิเคราะห์และข้อมูลเชิงลึกทางธุรกิจ

โพสต์นี้จะกล่าวถึงขั้นตอนต่างๆ เพื่อเปิดใช้งานฟังก์ชันเขียนกลับไปยัง Amazon Redshift จาก QuickSight โปรดทราบว่าเครื่องมือ BI แบบเดิมเป็นแบบอ่านอย่างเดียวโดยมีตัวเลือกเพียงเล็กน้อยหรือไม่มีเลยในการอัปเดตข้อมูลต้นฉบับ

ภาพรวมโซลูชัน

โซลูชันนี้ใช้บริการของ AWS ต่อไปนี้:

  • Amazon API Gateway Amazon – โฮสต์และรักษาความปลอดภัยการเขียนกลับ REST API ที่ QuickSight จะเรียกใช้
  • AWS แลมบ์ดา – เรียกใช้ฟังก์ชันการคำนวณที่จำเป็นในการสร้างแฮชและฟังก์ชันที่สองเพื่อทำการเขียนกลับอย่างปลอดภัย
  • อเมซอน QuickSight – เสนอแดชบอร์ด BI และความสามารถในการสร้างใบเสนอราคา
  • อเมซอน Redshift – จัดเก็บใบเสนอราคา ราคา และชุดข้อมูลอื่นๆ ที่เกี่ยวข้อง
  • ผู้จัดการความลับของ AWS – จัดเก็บและจัดการคีย์เพื่อลงนามแฮช (ข้อความย่อย)

แม้ว่าโซลูชันนี้จะใช้ Amazon Redshift เป็นที่เก็บข้อมูล แต่วิธีการที่คล้ายกันนี้สามารถนำไปใช้กับฐานข้อมูลใดๆ ก็ตามที่รองรับการสร้างฟังก์ชันที่ผู้ใช้กำหนด (UDF) ที่สามารถเรียกใช้ Lambda ได้

รูปภาพต่อไปนี้แสดงเวิร์กโฟลว์เพื่อดำเนินการเขียนกลับจาก QuickSight

ขั้นตอนแรกในการแก้ปัญหาคือการสร้างแฮชหรือสรุปข้อความของชุดแอตทริบิวต์ใน Amazon Redshift โดยเรียกใช้ฟังก์ชัน Lambda ขั้นตอนนี้ป้องกันการดัดแปลงคำขอ ในการสร้างแฮช Amazon Redshift จะเรียกใช้ สเกลาร์แลมบ์ดา UDF. กลไกการแฮชที่ใช้ที่นี่เป็นที่นิยม เบลค2 ฟังก์ชัน (มีอยู่ในไลบรารี Python แฮชลิบ). เพื่อความปลอดภัยยิ่งขึ้นของแฮช จะใช้การแฮชแบบคีย์ ซึ่งเป็นทางเลือกที่เร็วกว่าและง่ายกว่า รหัสการตรวจสอบข้อความที่ใช้แฮช (เอชเอ็มเอซี). คีย์นี้สร้างและจัดเก็บโดย Secrets Manager และควรเข้าถึงได้เฉพาะแอปพลิเคชันที่ได้รับอนุญาตเท่านั้น หลังจากสร้างแฮชที่ปลอดภัยแล้ว แฮชจะถูกส่งกลับไปยัง Amazon Redshift และรวมกันในมุมมอง Amazon Redshift

การเขียนใบเสนอราคาที่สร้างขึ้นกลับไปยัง Amazon Redshift ดำเนินการโดยฟังก์ชัน Lambda การเขียนกลับ และสร้างตำแหน่งข้อมูล API Gateway REST API เพื่อรักษาความปลอดภัยและส่งผ่านคำขอไปยังฟังก์ชันเขียนกลับ ฟังก์ชันเขียนกลับดำเนินการต่อไปนี้:

  1. สร้างแฮชตามพารามิเตอร์อินพุต API ที่ได้รับจาก QuickSight
  2. ลงชื่อแฮชโดยใช้รหัสจาก Secrets Manager
  3. เปรียบเทียบแฮชที่สร้างขึ้นกับแฮชที่ได้รับจากพารามิเตอร์อินพุตโดยใช้เมธอด comparison_digest ที่มีอยู่ใน เอชแมค โมดูล.
  4. เมื่อตรวจสอบสำเร็จ ให้เขียนบันทึกลงในตารางการส่งใบเสนอราคาใน Amazon Redshift

ส่วนต่อไปนี้แสดงขั้นตอนโดยละเอียดพร้อมเพย์โหลดตัวอย่างและข้อมูลโค้ด

สร้างแฮช

แฮชถูกสร้างขึ้นโดยใช้ Lambda UDF ใน Amazon Redshift นอกจากนี้ คีย์ Secrets Manager ยังใช้เพื่อลงชื่อแฮช หากต้องการสร้างแฮช ให้ทำตามขั้นตอนต่อไปนี้:

  1. สร้างคีย์ Secrets Manager จากไฟล์ อินเทอร์เฟซบรรทัดคำสั่ง AWS AWS (AWS CLI):
aws secretsmanager create-secret --name “name_of_secret” --description "Secret key to sign hash" --secret-string '{" name_of_key ":"value"}' --region us-east-1

  1. สร้าง Lambda UDF เพื่อสร้างแฮชสำหรับการเข้ารหัส:
import boto3 import base64
import json
from hashlib import blake2b
from botocore.exceptions import ClientError def get_secret(): #This key is used by the Lambda function to further secure the hash. secret_name = "<name_of_secret>" region_name = "<aws_region_name>" # Create a Secrets Manager client session = boto3.session.Session() client = session.client(service_name='secretsmanager', region_name=<aws_region_name> ) # In this sample we only handle the specific exceptions for the 'GetSecretValue' API. # See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html # We rethrow the exception by default. try: get_secret_value_response = client.get_secret_value(SecretId=secret_name) except Exception as e: raise e if "SecretString" in get_secret_value_response: access_token = get_secret_value_response["SecretString"] else: access_token = get_secret_value_response["SecretBinary"] return json.loads(access_token)[<token key name>] SECRET_KEY = get_secret()
AUTH_SIZE = 16 def sign(payload): h = blake2b(digest_size=AUTH_SIZE, key=SECRET_KEY) h.update(payload) return h.hexdigest().encode('utf-8') def lambda_handler(event, context):
ret = dict() try: res = [] for argument in event['arguments']: try: msg = json.dumps(argument) signed_key = sign(str.encode(msg)) res.append(signed_key.decode('utf-8')) except: res.append(None) ret['success'] = True ret['results'] = res except Exception as e: ret['success'] = False ret['error_msg'] = str(e) return json.dumps(ret)

  1. กำหนด UDF ของ Amazon Redshift เพื่อเรียกใช้ฟังก์ชัน Lambda เพื่อสร้างแฮช:
CREATE OR REPLACE EXTERNAL FUNCTION udf_get_digest (par1 varchar)
RETURNS varchar STABLE
LAMBDA 'redshift_get_digest'
IAM_ROLE 'arn:aws:iam::<AWSACCOUNTID>role/service-role/<role_name>';

พื้นที่ AWS Identity และการจัดการการเข้าถึง บทบาท (IAM) ในขั้นตอนก่อนหน้าควรมีนโยบายต่อไปนี้แนบมาด้วยเพื่อให้สามารถเรียกใช้ฟังก์ชัน Lambda ได้:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:<AWSACCOUNTID>1:function:redshift_get_digest" }
}

  1. ดึงกุญแจจาก Secrets Manager

คีย์นี้ใช้โดยฟังก์ชัน Lambda เพื่อรักษาความปลอดภัยแฮชเพิ่มเติม สิ่งนี้ระบุไว้ใน get_secret ฟังก์ชันในขั้นตอนที่ 2

ตั้งค่าชุดข้อมูล Amazon Redshift ใน QuickSight

แดชบอร์ดการสร้างใบเสนอราคาใช้มุมมอง Amazon Redshift ต่อไปนี้

สร้างมุมมอง Amazon Redshift ที่ใช้คอลัมน์ก่อนหน้าทั้งหมดพร้อมกับคอลัมน์แฮช:

create view quote_gen_vw as select *, udf_get_digest ( customername || BGCheckRequired || Skill|| Shift ||State ||Cost ) from billing_input_tbl

บันทึกจะมีลักษณะเหมือนภาพหน้าจอต่อไปนี้

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

สร้างทรัพยากรเกตเวย์ API

การดำเนินการเขียนกลับเริ่มต้นโดย QuickSight ที่เรียกใช้ทรัพยากร API Gateway ซึ่งเรียกใช้ฟังก์ชันเขียนกลับของ Lambda ตามข้อกำหนดเบื้องต้นสำหรับการสร้างฟิลด์ที่มีการคำนวณใน QuickSight เพื่อเรียกการเขียนกลับ API คุณต้องสร้างทรัพยากรเหล่านี้ก่อน

API Gateway รักษาความปลอดภัยและเรียกใช้ฟังก์ชันการเขียนกลับ Lambda ด้วยพารามิเตอร์ที่สร้างขึ้นเป็นพารามิเตอร์สตริงการสืบค้น URL พร้อมเทมเพลตการแมป พารามิเตอร์การแมปสามารถหลีกเลี่ยงได้โดยใช้การรวมพร็อกซีแลมบ์ดา

สร้างทรัพยากร REST API ประเภทเมธอด GET ที่ใช้ฟังก์ชัน Lambda (สร้างในขั้นตอนถัดไป) เป็นประเภทการรวม สำหรับคำแนะนำ โปรดดูที่ การสร้าง REST API ใน Amazon API Gateway และ ตั้งค่าการผสานรวม Lambda ใน API Gateway.

ภาพหน้าจอต่อไปนี้แสดงรายละเอียดสำหรับการสร้างพารามิเตอร์สตริงการสืบค้นสำหรับแต่ละพารามิเตอร์ที่ส่งผ่านไปยัง API Gateway

ภาพหน้าจอต่อไปนี้แสดงรายละเอียดสำหรับการสร้างพารามิเตอร์เทมเพลตการแมปสำหรับแต่ละพารามิเตอร์ที่ส่งผ่านไปยัง API Gateway

สร้างฟังก์ชันแลมบ์ดา

สร้างฟังก์ชัน Lambda ใหม่สำหรับเกตเวย์ API เพื่อเรียกใช้ ฟังก์ชัน Lambda ดำเนินการตามขั้นตอนต่อไปนี้:

  1. รับพารามิเตอร์จาก QuickSight ผ่าน API Gateway และแฮชพารามิเตอร์ที่ต่อกัน

ตัวอย่างโค้ดต่อไปนี้ดึงพารามิเตอร์จากการเรียก API Gateway โดยใช้ออบเจกต์เหตุการณ์ของฟังก์ชัน Lambda:

 customer= event['customer’]) bgc = event['bgc']

ฟังก์ชันดำเนินการตรรกะการแฮชตามที่แสดงใน สร้างแฮช ขั้นตอนก่อนหน้านี้โดยใช้พารามิเตอร์ที่ต่อกันที่ส่งผ่านโดย QuickSight

  1. เปรียบเทียบผลลัพธ์ที่แฮชกับพารามิเตอร์แฮช

หากสิ่งเหล่านี้ไม่ตรงกัน การเขียนกลับจะไม่เกิดขึ้น

  1. หากแฮชตรงกัน ให้เขียนกลับ ตรวจสอบการมีอยู่ของเรกคอร์ดในตารางการสร้างใบเสนอราคาโดยสร้างแบบสอบถามจากตารางโดยใช้พารามิเตอร์ที่ส่งผ่านจาก QuickSight:
query_str = "select * From tbquote where cust = '" + cust + "' and bgc = '" + bgc +"'" +" and skilledtrades = '" + skilledtrades + "' and shift = '" +shift + "' and jobdutydescription ='" + jobdutydescription + "'"

  1. ดำเนินการต่อไปนี้ตามผลลัพธ์ของแบบสอบถาม:
    1. หากไม่มีเรกคอร์ดสำหรับชุดค่าผสมก่อนหน้านี้ ให้สร้างและเรียกใช้คิวรีแทรกโดยใช้พารามิเตอร์ทั้งหมดที่มีสถานะเป็นที่สร้าง
    2. หากมีเรกคอร์ดสำหรับชุดค่าผสมก่อนหน้านี้ ให้สร้างและเรียกใช้คิวรีแทรกที่มีสถานะเป็นอยู่ระหว่างตรวจทาน quote_Id สำหรับชุดค่าผสมที่มีอยู่จะถูกใช้ซ้ำ

สร้างภาพ QuickSight

ขั้นตอนนี้เกี่ยวข้องกับการสร้างวิชวลตารางที่ใช้ฟิลด์จากการคำนวณเพื่อส่งพารามิเตอร์ไปยัง API Gateway และเรียกใช้ฟังก์ชัน Lambda ที่อยู่ก่อนหน้า

  1. เพิ่มฟิลด์คำนวณ QuickSight ที่ชื่อว่า Generate Quote เพื่อเก็บ URL ที่โฮสต์ของ API Gateway ซึ่งจะถูกทริกเกอร์ให้เขียนประวัติการอ้างกลับลงใน Amazon Redshift:
concat("https://xxxxx.execute-api.us-east-1.amazonaws.com/stage_name/apiresourcename/?cust=",customername,"&bgc=",bgcheckrequired,"&billrate=",toString(billrate),"&skilledtrades=",skilledtrades,"&shift=",shift,"&jobdutydescription=",jobdutydescription,"&hash=",hashvalue)

  1. สร้างภาพตาราง QuickSight
  2. เพิ่มฟิลด์ที่จำเป็น เช่น ลูกค้า ทักษะ และต้นทุน
  3. เพิ่มเขตข้อมูลจากการคำนวณสร้างใบเสนอราคาและจัดรูปแบบเป็นไฮเปอร์ลิงก์

การเลือกลิงก์นี้จะเขียนบันทึกลงใน Amazon Redshift การดำเนินการนี้มีผลกับค่าแฮชเดิมที่ส่งกลับเมื่อฟังก์ชันแลมบ์ดาดำเนินการแฮชกับพารามิเตอร์

ภาพหน้าจอต่อไปนี้แสดงภาพตารางตัวอย่าง

เขียนไปยังฐานข้อมูล Amazon Redshift

คีย์ Secrets Manager ถูกดึงและใช้โดยฟังก์ชัน Lambda เพื่อสร้างแฮชสำหรับการเปรียบเทียบ การเขียนกลับจะดำเนินการก็ต่อเมื่อแฮชตรงกับแฮชที่ส่งผ่านในพารามิเตอร์

ตาราง Amazon Redshift ต่อไปนี้จะบันทึกประวัติใบเสนอราคาตามที่ฟังก์ชัน Lambda สร้างขึ้น บันทึกสีเขียวแสดงถึงบันทึกล่าสุดสำหรับใบเสนอราคา

ข้อพิจารณาและขั้นตอนต่อไป

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

  • ปรับใช้ REST API ใน VPC ส่วนตัวที่เข้าถึงได้เฉพาะผู้ใช้ QuickSight
  • เพื่อป้องกันการโจมตีซ้ำ สามารถสร้างการประทับเวลาควบคู่ไปกับฟังก์ชันแฮชและส่งผ่านเป็นพารามิเตอร์เพิ่มเติมใน URL การเขียนกลับ จากนั้น ฟังก์ชันแลมบ์ดาส่วนหลังสามารถปรับเปลี่ยนให้อนุญาตเฉพาะการเขียนกลับภายในเกณฑ์ตามเวลาที่กำหนดเท่านั้น
  • ปฏิบัติตามเกตเวย์ API ควบคุมการเข้าถึง และ ความปลอดภัย ปฏิบัติที่ดีที่สุด.
  • บรรเทา การปฏิเสธการให้บริการที่เป็นไปได้สำหรับ API สาธารณะ

คุณสามารถปรับปรุงโซลูชันนี้เพิ่มเติมเพื่อแสดงฟอร์มบนเว็บเมื่อเปิด URL การเขียนกลับ สิ่งนี้สามารถนำไปใช้ได้โดยการสร้างฟอร์ม HTML แบบไดนามิกในฟังก์ชัน Lambda แบ็กเอนด์เพื่อรองรับการป้อนข้อมูลเพิ่มเติม หากปริมาณงานของคุณต้องการการเขียนกลับจำนวนมากซึ่งต้องการปริมาณงานหรือการทำงานพร้อมกันที่สูงกว่า ที่เก็บข้อมูลที่สร้างขึ้นตามวัตถุประสงค์ เช่น Amazon Aurora PostgreSQL-รุ่นที่เข้ากันได้ อาจเป็นทางเลือกที่ดีกว่า สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การเรียกใช้ฟังก์ชัน AWS Lambda จากคลัสเตอร์ Aurora PostgreSQL DB. จากนั้นสามารถซิงโครไนซ์การอัปเดตเหล่านี้กับตาราง Amazon Redshift โดยใช้ แบบสอบถามส่วนกลาง.

สรุป

โพสต์นี้แสดงวิธีใช้ QuickSight ร่วมกับ Lambda, API Gateway, Secrets Manager และ Amazon Redshift เพื่อเก็บข้อมูลอินพุตของผู้ใช้และอัปเดตคลังข้อมูล Amazon Redshift ของคุณอย่างปลอดภัยโดยไม่ต้องออกจากสภาพแวดล้อม QuickSight BI โซลูชันนี้ช่วยขจัดความจำเป็นในการสร้างแอปพลิเคชันภายนอกหรืออินเทอร์เฟซผู้ใช้สำหรับการอัพเดตฐานข้อมูลหรือการดำเนินการแทรก และลดค่าใช้จ่ายในการพัฒนาและบำรุงรักษาที่เกี่ยวข้อง การเรียก API Gateway ยังสามารถรักษาความปลอดภัยได้โดยใช้คีย์หรือโทเค็นเพื่อให้แน่ใจว่า API Gateway จะยอมรับเฉพาะการเรียกที่มาจาก QuickSight เท่านั้น สิ่งนี้จะกล่าวถึงในโพสต์ถัดไป


เกี่ยวกับผู้เขียน

ศรีกันต์ บาเฮติ เป็นสถาปนิกโซลูชันหลักที่เชี่ยวชาญทั่วโลกสำหรับ Amazon QuickSight เขาเริ่มต้นอาชีพด้วยการเป็นที่ปรึกษาและทำงานให้กับองค์กรเอกชนและรัฐบาลหลายแห่ง ต่อมาเขาได้ทำงานให้กับ PerkinElmer Health and Sciences & eResearch Technology Inc ซึ่งเขารับผิดชอบในการออกแบบและพัฒนาเว็บแอปพลิเคชันที่มีการเข้าชมสูง ไปป์ไลน์ข้อมูลที่ปรับขนาดได้สูงและบำรุงรักษาได้สำหรับแพลตฟอร์มการรายงานโดยใช้บริการ AWS และการประมวลผลแบบไร้เซิร์ฟเวอร์

ราจี ศิวะสุบรามาเนียม เป็น Sr. Solutions Architect ที่ AWS โดยเน้นที่ Analytics Raji มีความเชี่ยวชาญในด้านการออกแบบโซลูชันการจัดการข้อมูลองค์กรแบบ end-to-end ระบบธุรกิจอัจฉริยะและการวิเคราะห์สำหรับบริษัทที่ติดอันดับ Fortune 500 และ Fortune 100 ทั่วโลก เธอมีประสบการณ์เชิงลึกในการบูรณาการข้อมูลด้านการดูแลสุขภาพและการวิเคราะห์ด้วยชุดข้อมูลด้านการดูแลสุขภาพที่หลากหลาย รวมถึงตลาดที่มีการจัดการ การกำหนดเป้าหมายของแพทย์ และการวิเคราะห์ผู้ป่วย

ประทับเวลา:

เพิ่มเติมจาก AWS ข้อมูลขนาดใหญ่