Can Amazon MWAA Serverless replace Amazon MWAA Provisioned?

Airflow แบบ Serverless ที่ทาง AWS จัดมาให้ มันน่าใช้ไหมนะ เอามาแทน Provisioned ดีไหม?

ในโลกของ Data engineering ยังก็ไม่พ้นเรื่องของการทำ data pipeline แต่สิ่งที่มากไปกว่านั้นคือ Orchestrator ด้วย Orchestrator นั้นมีความสำคัญมาก! เพราะเราคงไม่มาสั่งการทำงานของ Data pipeline ด้วยตนเองทุกครั้งใช่ไหมครับ Automate pipeline คือสิ่งจำเป็น แต่เครื่องมือที่เป็น Orchestrator นั้นก็มีให้ใช้มากมายซะเหลือเกิน

ถ้าจะเรียงรายชื่อออกมาก็มีทั้ง open source และ closed source อย่างใน Open source ก็จะมี Apache Airflow, Dagster หรือ Prefect แต่ที่เป็นที่นิยมมากๆเลยก็คงหนีไม่พ้น Apache Airflow

และส่วน Closed source นั้นก็มีหลากหลายรูปแบบที่อยู่ใน platform ต่างๆไม่ว่าจะเป็น Google cloud, Microsoft Azure, Amazon Web Services และประเภท Dataplatform อย่าง Databricks etc…


การมาถึงของ AWS MWAA Serverless

Amazon Managed Workflows for Apache Airflow (MWAA)

เมื่อปลายปี 2025 ทาง AWS ก็ได้ปล่อย service ใหม่นั้นก็คือ MWAA Serverless ขึ้นมาซึ่ง Concept ของ AWS MWAA Serverless ก็เพื่อให้เหล่า Data user ได้ใช้งานได้สะดวกมากขึ้นโดยไม่ต้องคอยกังวลเรื่องของการจัดการ Infrastructor

ซึ่งถ้าเป็นตัว Provisioned ที่ไม่ใช่ Serverless เวลาสร้าง Environment ขึ้นมาเบื้องหลังจะทำการสร้าง Infrastructor ขึ้นมาให้ด้วยซึ่งจะมี cost ในระหว่างเปิดทำงานอยู่ตลอด ต่อให้ไม่ได้ทำงานอะไรก็ตาม ก็จะมี cost อยู่ดี


MWAA is not only orchestrator in AWS.

แต่ทีนี้ AWS ไม่ได้มี Orchestrator แค่ MWAA เท่านั้น ยังมี Step function ที่เป็นที่นิยมมากๆอยู่ด้วย แต่เอาละ เดี๋ยวจะเอาไว้เปรียบเทียบคราวหน้าครับ บทความนี้จะเน้น MWAA Serverless แต่ก่อนจะไปดูตัว Serverless เรามาดูตัว Provisioned ก่อนเป็นยังไง

แต่ช้าก่อน! ทบทวนเรื่อง Airflow นิดหนึ่ง Airflow นั้นเวลาที่เราอยากเขียน script สำหรับการทำงานต่างเราจะเรียกสิ่งนี้ว่า Dag file ซึ่งนี้ก็เป็น script ในการเขียนโครงสร้าง workflow อยู่ในรูปแบบ DAG (Directed Acyclic Graph) ภายใน DAG เองก็ประกอบไปด้วย TASK ซึ่งจะเป็นหน่วยย่อยๆภายใน DAG เอาล่ะ ประมาณนี้ก่อนเดี๋ยวจะกลายเป็น Airflow101 ไป 😆

Amazon MWAA provisioned

สำหรับ Amazon MWAA provisioned เป็นการยกเอา Apache Airflow มา Deployed ที่ AWS โดยทาง AWS จะจัดการเตรียม Resource ไว้ให้ไม่ว่าจะเป็น Compute Storage และ Database พร้อมทั้งจัดการเรื่องเชื่อมต่อเข้ากับ AWS ให้เสร็จสรรพ พร้อมทั้งดูแลเรื่อง scalability, availability, และ security โดยเราจะได้ใช้งาน Airflow เหมือนกับเวลาเรา Deploy บนเครื่องตัวเองเลย


Amazon MWAA serverless

มาถึงเจ้าตัวหลักที่เราต้องการเขียนถึงแล้ว Amazon MWAA serverless ที่มาในรูปแบบที่เราไม่ต้อง Set up infrastructor อะไรเลย แค่โยน Dag ไปไว้ที่ S3 Bucket เท่านั้นก็สามารถใช้ได้ทันทีสะดวกสุดๆ แต่ต้องบอกก่อนว่า Amazon MWAA serverless จะอ่านเฉพาะไฟล์ yaml เท่านั้น ถ้าเราจะใช้งานโดยเอาโค้ด Dag file ที่เป็น python จากที่อื่นมาเราจำเป็นต้องเปลี่ยนให้เป็น yaml ก่อนซึ่ง AWS ก็มี Library เป็นตัวช่วยให้ด้วยแล้ว และถ้าอยากสร้าง Dag ใหม่เลยบน AWS ก็สามารถสร้างได้ที่ Amazon Sagemaker เช่นกัน ซึ่งจะอยู่ในพาร์ทที่เรียกว่า Workflow เราสามารถลากวางได้เลยมีหน้า GUI ให้ใช้ มาลองใช้งานกันดูว่าใช้งานยังไง

การเขียน DAG เพื่อใช้งาน Amazon MWAA serverless จะมีอยู่สองแบบหลักๆ

1.เขียน DAG file เองแล้วมาโยนไว้ที่ S3
ก็เริ่มจากเขียน DAG file ที่ VS code หรือ tool ไหนก็ได้ อย่างตัวอย่างนี้ แล้วก็ upload ไว้ที่ S3

simples3test:
dag_id: simples3test
tasks:
list_objects:
operator: airflow.providers.amazon.aws.operators.s3.S3ListOperator
bucket: your-s3-bucket-name
prefix: ""
retries: 0
create_object_list:
dependencies:
- list_objects
operator: airflow.providers.amazon.aws.operators.s3.S3CreateObjectOperator
data: Hello MWAA serverless
s3_bucket: mwaa-serverless-test-cdlb
s3_key: demo_text.txt
replace: true
schedule: 0 0 * * *

หลังจากนำมาวางไว้ที่ S3 แล้วให้ใช้ command AWS CLI เพื่อที่จะบันทึก DAG file เข้าไปที่ Amazon MWAA serverless เพราะไม่ใช่ว่าจะวางปุ๊ปแล้วจะทำงานทันที จะทำการสั่งให้ทำงานได้โดยใช้ AWS CLI เหมือนกัน

# Create workflow
aws mwaa-serverless create-workflow \
--name simple_s3_test \
--definition-s3-location '{ "Bucket": "your-s3-bucket-name", "ObjectKey": "path/simple_s3_test.yaml" }' \
--role-arn arn:aws:iam::111122223333:role/mwaa-serverless-access-role \
--region us-east-1
# Execute the workflow
aws mwaa-serverless start-workflow-run \
--workflow-arn arn:aws:airflow-serverless:us-east-2:111122223333:workflow/simple_s3_test-abc1234def \
--region us-east-1
# Update workflow if you have made any changes.
aws mwaa-serverless update-workflow \
--workflow-arn arn:aws:airflow-serverless:us-east-2:111122223333:workflow/simple_s3_test-abc1234def \
--definition-s3-location '{ "Bucket": "your-s3-bucket-name", "ObjectKey": "path/simple_s3_test.yaml" }' \
--role-arn arn:aws:iam::111122223333:role/mwaa-serverless-access-role \
--region us-east-1

เมื่อลองเช็คที่ Amazon MWAA serverless เราก็จะพบกับ DAG ที่เราสร้างเอาไว้

หลังจากนั้นเราสามารถไปดูที่หน้า UI ได้ว่าการทำงานของ DAG นั้นทำงานถูกต้องไหม และเพื่อที่จะดู view run เราสามารถคลิ๊กเข้าไปดูได้เลย แล้วเราก็จะไปโผล่ที่หน้า AWS Sagemaker หลังจากนั้นก็สามารถเช็ค log ได้ทันที (ดูผ่าน Cloudwatch โดยตรงก็ได้)

2.เขียน DAG ผ่าน AWS Sagemaker workflow

เป็นการสร้าง DAG ผ่านหน้า GUI ที่อยู่ใน AWS Sagemaker workflow ให้ไปที่หน้า Amazon MWAA serverless แล้วคลิ๊กที่ Create workflow เท่านี้เราก็จะถูกพาไปที่หน้า AWS Sagemaker workflow แล้วครับ

เราสามารถลากวางสิ่งที่เราต้องการได้เลย อย่างเช่น Task save file to S3 หรือ Task trigger Glue job อะไรแบบนี้ก็ทำได้เช่นกัน หลังจากกด Save ไว้เรียบร้อยแล้ว เราก็สามารถเช็คได้ที่หน้า Amazon MWAA serverless ง่ายใช่ไหมละครับสะดวกแบบมากขึ้นเยอะ 😎

Extra: แปลงไฟล์จาก dag.py ให้เป็น dag.yaml หรือก็คือเปลี่ยน python file ให้เป็น yaml เพื่อจะได้ใช้งาน Amazon MWAA serverless เริ่มจาก install library ของ AWS

# AWS Python to Yaml Dag Converter for MWAA Serverless
pip install python-to-yaml-dag-converter-mwaa-serverless
# To convert .py to .yaml
dag-converter convert <python-dag-file>

ความเหมือนที่แตกต่าง?
หลังจากได้พาทดลองทำแล้ว จะเห็นได้ว่าพอเป็น Serverless แล้ว เพียงสั่งงานไม่กี่อย่างก็สามารถใช้งานได้ทันทีไม่ต้อง Set up มากมาย แต่สำหรับเจ้า Amazon MWAA serverless นั้น ก็จะมีข้อดีข้อเสียแตกต่างจาก Amazon MWAA provisioned พอสมควรเลย โดยเฉพาะ feature ต่างๆที่ไม่ได้เหมือนกับ Airflow ทั่วไป

ข้อแตกต่างที่เห็นได้ชัดๆ

  • Dag operator ที่ไม่ได้มีครบเหมือนกับ Airflow ปรกติทั่วไป โดย Amazon MWAA serverless จะเน้นไปที่ Operator ที่เป็น AWS operator ต่างๆ
    เช่น S3CreateBucketOperator, BedrockCreateKnowledgeBaseOperator, BatchOperator หรือ GlueJobOperator ตัดทิ้งพวก classic operator อย่าง PythonOperator หรือ BashOperator ไปได้เลย ตรงนี้ก็เข้าใจได้ว่าบางอย่างก็ไม่ได้อยากให้มีการ compute อยู่ที่ตัว serverless เอง
  • Dag parameter ที่ก็ไม่ได้มีให้ใช้ครบทุกอย่าง และนี้ก็เป็นตัวอย่างของ parameter ที่ใช้ไม่ได้ด้านล่าง โดยถ้าใครคุ้นชิน หรือต้อง Migrate จาก Airflow ดั้งเดิมมาอาจจะปวดหัวได้เพราะอย่างการใช้ email_on_failure ที่เอาไว้แจ้งเตือนก็ต้องไปเปลี่ยนไปใช้แจ้งเตือนผ่าน Service อื่นของ AWS
    catchup, access_control, jinja_environment_kwargs, render_template_as_native_obj, tags, owner_links, auto_register, fail_fast, dag_display_name, depends_on_past, email_on_failure, email_on_retry, description, max_consecutive_failed_dag_runs, dagrun_timeout, sla_miss_callback, on_failure_callback, on_success_callback, is_paused_upon_creation

ทั้งหมดจึงขอสรุปประมาณนี้ว่า

ถ้าเรามาใช้งาน AWS แบบใช้เฉพาะ Service AWS ก็มองว่าก็ค่อนข้างตอบโจทย์เลยใช้งานง่ายไม่ต้อง Set up อะไรมากเขียน DAG yaml ก็ใช้งานได้เลย อยากจะสร้างก็ไปใช้ผ่าน Sagemaker เองก็มี GUI ให้ใช้งาน และสำหรับใคร หรือองค์กรที่ใช้งาน Airflow อยู่แล้ว อยากจะย้ายมาใช้งานนั้น ไม่ค่อยจะแนะนำ เพราะต้องปรับเยอะมาก จะเป็นการเปลือง resource ในการทำงานเกินไปและยิ่งถ้าของเดิมมีการใช้งานที่ซับซ้อนอย่างเช่น DAG trigger DAG หรือพวก Dynamic task ก็ไม่มีให้ใช้ ถ้าจะใช้ Airflow แบบครบทุก feature ก็คงต้องมองหา Amazon MWAA Provisioned อยู่ดี จึงขอสรุปว่าเป็นการใช้งานกันคนละแบบเลยแต่แค่ Concept ของการสร้าง Workflow ยังเหมือนกัน

ref: https://docs.aws.amazon.com/mwaa/latest/mwaa-serverless-userguide/mwaas-concepts.html

Please subscribe!

Tags:

Leave a comment