Amazon QuickSight สามารถเขียนโค้ดสร้าง Dashboards, Analyzes และ Templates ได้แล้ว!!! #reInvent

การอัปเดตล่าสุดทำให้ตอนนี้เราสามารถระบุข้อมูลคำจำกัดความสำหรับ Object (dashboards, analyses, templates) ด้วย การใช้งานคำสั่ง Create/Update API กล่าวอีกนัยหนึ่ง IaC สามารถทำได้แม้กับ QuickSight แล้ว ณ ตอนนี้
2022.12.08

ล่าสุด QuickSight ได้มีการอัพเดทใหญ่เกิดขึ้นจากบทความด้านล่างนี้

  • Expanded API capabilities now generally available for Amazon QuickSight ซึ่งการอัปเดตล่าสุดทำให้ตอนนี้เราสามารถระบุข้อมูลคำจำกัดความสำหรับ Object (dashboards, analyses, templates) ด้วย การใช้งานคำสั่ง Create/Update API กล่าวอีกนัยหนึ่ง IaC สามารถทำได้แม้กับ QuickSight แล้ว ณ ตอนนี้

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

การทดลอง

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

การจำแนกข้อมูลจาก object ที่มีอยู่

ก่อนอื่น มีการเพิ่ม Describe API บางส่วนในการอัปเดตนี้ และขณะนี้สามารถรับคำจำกัดความของวัตถุได้แล้ว ณ วันนี้ พร้อมใช้งานใน V1 ของ AWS CLI เท่านั้น ซึ่งต้องใช้ v1.27.18 หรือสูงกว่าขึ้นไป

  • การกำหนดข้อมูล analysis
  • การกำหนดข้อมูล dashboard
  • การกำหนดข้อมูล template
% aws quicksight describe-dashboard-definition --aws-account-id 12345678901 --dashboard-id 4275a105-a178-4cf2-9460-d06ae154e0b4
{
    "Status": 200,
    "DashboardId": "4275a105-a178-4cf2-9460-d06ae154e0b4",
    "Name": "chawish-blog",
    "Definition": {
        "DataSetIdentifierDeclarations": [
:
        ],
        "Sheets": [
:
        ],
        "CalculatedFields": [
:
        ],
        "ParameterDeclarations": [
:
        ],
        "FilterGroups": [],
        "AnalysisDefaults": {
:
        }
    },
    "RequestId": "0bfd8a31-dcca-48cf-a31e-0aa8b18d7c0b"
}

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

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

สร้าง object โดยใช้การกำหนดตัวแปร

ในส่วนต่อไป เราจะจำกัดความพารามิเตอร์เพื่อเพิ่มไปใน Create/Update APIs เพื่อที่เราจะสามารถสร้างและอัพเดต Object ที่ระบุข้อมูลไว้ได้ และหลังจากนี้เราจะบันทึกข้อมูลที่เรากำหนดไว้ก่อนหน้านี้ลงในไฟล์ JSON ในเครื่องและใช้เพื่อสร้าง Dashboard ใหม่ในอันดับถัดไป

% aws quicksight create-dashboard --aws-account-id 123456789012 --dashboard-id test-dashboard1234 --name test-create --region ap-southeast-1 --definition file:///definition.json
{
    "Status": 202,
    "Arn": "arn:aws:quicksight:us-east-1:123456789012:user/default/cmth-chawish.tilakul",
    "VersionArn": "arn:aws:quicksight:us-east-1:123456789012:user/default/cmth-chawish.tilakul",
    "DashboardId": "dashboard1234",
    "CreationStatus": "CREATION_IN_PROGRESS",
    "RequestId": "822e5232-3065-43cf-a30e-844fa8e6f7db"
}

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

% aws-v1 quicksight create-dashboard --aws-account-id 123456789012 --dashboard-id hoge1028dashboard --name hoge1028dash
board --definition file://hoge.json --profile hoge
An error occurred (InvalidParameterValueException) when calling the CreateDashboard operation: Error in TextBox 80be6bdb-2392-4a55-9971-40af2f2b0baf_9a416ea9-bc03-406a-a082-9d3c72deb43d of Sheet 80be6bdb-2392-4a55-9971-40af2f2b0baf_f7e81c69-9a95-4ca8-838f-3ba9b7643c3e : Element "img" is unsupported for Text Box

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


% aws quicksight create-dashboard --aws-account-id 123456789012 --dashboard-id test-dashboard1234 --name test-create --region ap-southeast-1 --definition file:///definition.json
{
    "Status": 202,
    "Arn": "arn:aws:quicksight:us-east-1:123456789012:user/default/cmth-chawish.tilakul",
    "VersionArn": "arn:aws:quicksight:us-east-1:123456789012:user/default/cmth-chawish.tilakul",
    "DashboardId": "dashboard1234",
    "CreationStatus": "CREATION_IN_PROGRESS",
    "RequestId": "822e5232-3065-43cf-a30e-844fa8e6f7db"
}

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

permissions.json

[
    {
        "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/dashboard1234",
        "Actions": [
            "quicksight:DescribeDashboard",
            "quicksight:ListDashboardVersions",
            "quicksight:UpdateDashboardPermissions",
            "quicksight:QueryDashboard",
            "quicksight:UpdateDashboard",
            "quicksight:DeleteDashboard",
            "quicksight:DescribeDashboardPermissions",
            "quicksight:UpdateDashboardPublishedVersion"
        ]
    }
]
% aws quicksight update-dashboard-permissions --aws-account-id 123456789012 --dashboard-id test-dashboard1234 --grant-permissions file:///permissions.json
{
    "Status": 200,
    "DashboardArn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/dashboard1234",
    "DashboardId": "dashboard1234",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:us-east-1:123456789012:user/default/cmth-chawish.tilakul",
            "Actions": [
                "quicksight:DescribeDashboard",
                "quicksight:ListDashboardVersions",
                "quicksight:UpdateDashboardPermissions",
                "quicksight:QueryDashboard",
                "quicksight:UpdateDashboard",
                "quicksight:DeleteDashboard",
                "quicksight:DescribeDashboardPermissions",
                "quicksight:UpdateDashboardPublishedVersion"
            ]
        }
    ],
    "RequestId": "df8586f4-f5a2-4a4a-9e8e-4f534ea4fefa",
    "LinkSharingConfiguration": {
        "Permissions": []
    }
}

การใช้งาน Permission สำเร็จลุล่วงไปได้ด้วยดีและตัว Dashboard ก็แสดงผลได้ปกติ

ถ้าเราสร้าง Dashboard แล้วตัวระบบก็จะแสดงผลตามที่เรากำหนดค่าไว้ก่อนหน้านี้

อย่างไรก็ตาม นี่คือ Dashboard ที่ใช้อ้างอิงบล็อกในครั้งนี้ เนื่องจากผมได้ลบส่วน TextBox ออกไป แดชบอร์ดที่สร้างจากโค้ดจึงลบ TextBox ออกไปนั้นเองครับ

สุดท้าย

ล่าสุด ณ วันนี้เรารู้แล้วว่า Amazon QuickSight สามารถเขียนโค้ดจัดการ dashboards, analyses, templates ได้แล้ว ดังนั้นผมจะลองใช้งานสิ่งนี้ดู

และผมคิดว่ามันไม่ธรรมดาเลย เพราะไม่กี่เดือนที่ผ่านมา ก็มีคนถามผมว่า "เป็นไปได้ไหมที่จะทำ IaC ใน QuickSight" ซึ่งนี้ถือเป็นวิวัฒนาการของ QuickSight ที่ดีมากยิ่งขึ้น

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

AWS re:Invent พิเศษ

งานการประชุมที่ใหญ่ที่สุดของ AWS จะจัดขึ้นในลาสเวกัสตั้งแต่วันที่ 28 พฤศจิกายนถึง 2 ธันวาคม 2022ในปีนี้ พนักงานมากกว่า 50 คนจาก ClassMethod จะเข้าร่วมในงานและรายงานข่าวเพื่อเตรียมพอร์ทัลไซต์ที่แนะนำสำหรับแต่ละเซสชัน
ภาษาญี่ปุ่น Visit the re:Invent 2022 portal site

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

ภาษาญี่ปุ่น Open re:Invent 2022 article list

สรุป

เนื้อหาทั้งหมดในบล็อกนี้ผมแปลมาจากบล็อกต้นฉบับของคุณ いわさ สิ่งทุกท่านสามารไปตามอ่านดูได้ในเวอร์ชั่นภาษาญี่ปุ่นได้ที่ลิงค์ด้านล่างนี้เลยครับผม

- Amazon QuickSight でダッシュボード、分析、テンプレートをコード管理出来るようになりました #reInvent