Query AWS และ cloud services อื่น ๆผ่าน SQL ด้วย Steampipe

Raksit MANTANACHARU
NonTechCompany
Published in
3 min readOct 6, 2022

บทความนี้จะมาแนะนำเครื่องมือที่ชื่อว่า Steampipe ใช้สำหรับ query resource ของ cloud services ต่าง ๆ เช่น AWS ผ่าน SQL ที่หลาย ๆ คนคุ้นเคย มาลองดูกันสักหน่อยว่าเป็นอย่างไร

ปัญหาที่เจอ

ระบบงานที่ใช้ในปัจจุบันจะมี infrastructure ส่วนมากอยู่บน Amazon Web Services (AWS) แน่นอนว่าในทุก ๆ วันเราจะต้องเข้าไปดู resource ต่าง ๆ บน AWS ซึ่งสำหรับเราการกดเข้าไปดูผ่าน AWS Console มันก็กินเวลาเยอะ แถมบาง resource ก็มีความใช้งานยากง่ายไม่เท่ากันอีก ก็เลยหนีไปสาย command-line interface (CLI) ต่อมาเราก็พบว่าการใช้งาน AWS CLI มันก็ยาวและเข้าใจยากเหมือนกัน เผอิญไปเจอเครื่องมือที่ช่วยแก้ปัญหาลักษณะนี้

ตัวอย่าง documentation ของ AWS CLI

Enter Steampipe!

Steampipe เป็น CLI ที่มี API เชื่อมกับ AWS เพื่อให้เราสามารถดึงข้อมูลของ resource ตามต้องการได้ ทุกครั้งที่เรา run คำสั่ง ข้อมูลจะนำมาเก็บไว้ใน PostgreSQL ซึ่งเป็น relational database ที่ start ขึ้นมา และจะถูกปิดไปหลังจาก query เสร็จ ด้วยการที่มันเป็น relational database ตัว Steampipe มีความสามารถที่จะให้เราดึงข้อมูลในรูปแบบของ SQL ดังนั้นเราสามารถใช้คำสั่งต่าง ๆ ที่ SQL มีให้ อย่าง join หรือ filter ได้เลย และเราสามารถใช้งาน Steampipe ผ่านเครื่องมือทั่ว ๆ ไปอย่างเช่น pgAdmin ได้ด้วยเช่นกัน

Steampipe Architecture

ข้อดีจากเท่าที่ใช้มา

  1. ประหยัดเวลาในการค้นข้อมูลเพียงแค่ทำผ่าน Terminal เท่านั้น ส่วนตัวมองว่าสะดวกสบายกว่าใช้งาน AWS Console
  2. ด้วยความที่คำสั่งเป็น SQL ทำให้มีความคุ้นชิน มีความยืดหยุ่นในระดับที่สามารถรองรับการใช้งานได้หลายรูปแบบ
  3. มี plugin อื่น ๆ ที่รองรับนอกเหนือจาก AWS เช่น Azure หรือ GCP
  4. มีความสามารถอื่น ๆ ตามในระบุไว้ข้างล่างของบทความนี้

ข้อจำกัดในตอนนี้

  1. Steampipe รองรับการ query (read) resource ขึ้นมาดูเท่านั้น ถ้าอยากได้การ create/update/delete resource สามารถทำได้ด้วยการสร้าง custom plugin ขึ้นมา
  2. ถ้าอยากดู resource ทั้งหมดทีเดียว จะต้องออกแรงในการ query ทีละ table ไม่สามารถ dump ออกมาทั้งหมดทีเดียวได้
  3. รองรับ database สำหรับการเก็บผลลัพธ์ในการ query เพียงแค่ PostgreSQL เท่านั้น ไม่สามารถเปลี่ยนไปใช้ database เจ้าอื่นได้
  4. สำหรับ Windows จะต้องติดตั้ง Windows Subsystem for Linux (WSL) ก่อน

เครื่องมือที่คล้าย ๆ กัน

  • CloudQuery เหมาะสำหรับการดู resource ทั้งหมดในหลาย ๆ account และรองรับ database นอกเหนือจาก PostgreSQL
  • Resoto มี feature สำหรับการทำ automation เช่น การ cleanup resource

มาลองใช้งาน Steampipe ดู

เริ่มจากการติดตั้ง Steampipe ผ่าน CLI กันก่อนผ่านคำสั่ง

# สำหรับ Linux
$ sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/turbot/steampipe/main/install.sh)"

# สำหรับ macOS
$ brew tap turbot/tap
$ brew install steampipe

จากนั้นให้เราติดตั้ง plugin ในบทความนี้แน่นอนเราต้องติดตั้ง AWS ผ่านคำสั่ง

$ steampipe plugin install aws

ต่อมาเราก็ตั้งค่า AWS credentials ที่ต้องการจะเชื่อมต่อผ่านวิธีต่าง ๆ เช่น

AWS credentials file

ปกติจะอยู่ใน $HOME/.aws/credentials ลักษณะนี้

Environment variables

Configure ผ่านเครื่องมือ aws-vault

ลองดูได้ในบทความที่เคยแนะนำเครื่องมือสำหรับจัดการ AWS credentials

เสร็จแล้วก็มาตั้งค่า Steampipe ผ่าน configuration file ซึ่งจะอยู่ใน $HOME/.steampipe/config/aws.spc จะได้หน้าตาลักษณะประมาณนี้

เริ่มใช้งาน Steampipe โดยการเปิด query session ผ่านคำสั่ง

$ steampipe query

จากนั้นเราก็สามารถ query resource ตามต้องการผ่าน interactive shell ที่มีทั้ง hotkey, autocomplete ได้แล้ว

ตัวอย่างการใช้งาน Steampipe interactive shell

เราสามารถเขียน SQL command ไว้เป็น file ก่อนแล้วใช้ผ่านคำสั่งนี้ก็ได้เหมือนกัน

$ steampipe query /path/to/your.sql

โดยปกติแล้ว output จะออกมาเป็นตารางแบบ text แต่เราก็สามารถให้ออกมาเป็น JSON/CSV ก็ได้ผ่านคำสั่ง

$ steampipe query /path/to/your.sql --output <json/csv>

ความสามารถอื่น ๆ

  • อย่างที่กล่าวไปในต้นบทความว่าเราสามารถต่อ Steampipe database ผ่าน database GUI tool ได้ โดยเราสามารถไปดึง database configuration ได้ผ่านคำสั่ง
$ steampipe service start --show-passwordSteampipe service is already running:Database:Host(s):            localhost, 127.0.0.1, 192.168.1.35Port:               9193Database:           steampipeUser:               steampipePassword:           9bf4_438d_84b2Connection string:  postgres://steampipe:9bf4_438d_84b2@localhost:9193/steampipe
Steampipe database connection settings บน DBeaver
เมื่อเชื่อมต่อได้แล้ว ก็สามารถ query บน application ได้เลย
  • สามารถ download หรือสร้าง dashboard บน web browser สำหรับดูข้อมูลที่น่าสนใจ ซึ่งเบื้องหลังก็คือใช้ Steampipe query ที่ตั้งไว้แล้วก็นำผลมาแสดงให้เห็น สำหรับ AWS แล้วตัวอย่างก็จะมี AWS insights สำหรับตรวจสอบ AWS resource เช่น ค่าใช้จ่ายในรอบ 1 ปี หรือ AWS compliance สำหรับ run พวก security controls หรือ compliance สำหรับการใช้งานแบบอื่น ๆ ก็เข้าไปดูที่ Steampipe mods ได้เลย หรือถ้าอยากจะสร้างเอง ด้วยภาษา Hashicorp configuration language (HCL) ก็ดูตาม guideline นี้ได้เลย
ตัวอย่าง AWS compliance dashboard ของ Steampipe
  • สามารถ run Steampipe บน Docker container ได้ ดูได้ตาม guideline นี้เลย
  • Documentation ดีมาก สร้างมาเพื่อ developer โดยเฉพาะเพราะมี developer guideline ระบุไว้อย่างชัดเจน

สรุป

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

--

--