ทำความเข้าใจเครื่องมือ IaC: AWS CDK กับ Terraform

AWS CDK และ Terraform – ไม่แน่ใจว่าจะเลือกอันไหนดี? บทความนี้จะช่วยให้คุณตัดสินใจได้อย่างมีข้อมูล

Cloud Computing ได้ปฏิวัติโลกแห่งข้อมูลและเทคโนโลยี ตั้งแต่วิธีที่เราปรับใช้และบำรุงรักษาแอปพลิเคชันไปจนถึงแนวทางการพัฒนา ทุกอย่างได้รับผลกระทบอย่างมากจาก Cloud Computing แอปพลิเคชันใหม่ทั้งหมดได้รับการพัฒนาให้ใช้งานบนคลาวด์และเข้ากันได้กับบริการคลาวด์

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

โครงสร้างพื้นฐานที่เป็นรหัส หรือที่เรียกว่า IAC หรือ IAAC ช่วยแก้ปัญหานี้ได้ โดยใช้ IAC เราสามารถกำหนดทรัพยากรของเราเป็นรหัสและใช้รหัสนี้เพื่อจัดเตรียมบริการคลาวด์ การใช้โครงสร้างพื้นฐานเป็นโค้ดช่วยให้นักพัฒนาหลายคนทำงานร่วมกันบนโครงสร้างพื้นฐานและติดตามการเปลี่ยนแปลงที่ทำโดยนักพัฒนา

โครงสร้างพื้นฐานเป็นโค้ดใน AWS

AWS เป็นผู้ให้บริการระบบคลาวด์ที่ใหญ่ที่สุดและใช้กันอย่างแพร่หลายมากที่สุดในโลก มีเครื่องมือ IAC ของตัวเองคือ AWS CloudFormation หรือ AWS CDK และยังช่วยให้เครื่องมือ IAC ของบุคคลที่สาม เช่น Terraform สามารถจัดเตรียมทรัพยากรได้ เมื่อเลือกเครื่องมือ IAC สำหรับ AWS Terraform ซึ่งเป็นเครื่องมือของบุคคลที่สามจะเป็นการแข่งขันที่แข็งแกร่งกับเครื่องมือที่จัดการโดย AWS, AWS CloudFormation และ AWS CDK

ด้วยตัวเลือกและคุณสมบัติมากมายที่เครื่องมือเหล่านี้มอบให้ การเลือกเครื่องมือ IAC ที่เหมาะสมจึงเป็นสิ่งที่ท้าทาย ในบทความนี้ เราจะพูดถึงความแตกต่างระหว่าง AWS CDK และ Terraform AWS CDK ใช้ Cloudformation ภายใน ดังนั้นสำหรับมุมมองเชิงลึกเกี่ยวกับ Cloudformation และ Terraform โปรดดูบทความที่เกี่ยวข้อง การทำความเข้าใจเครื่องมือ IAC: CloudFormation กับ Terraform

Terraform

Terraform เป็นโครงสร้างพื้นฐานโอเพนซอร์ซเป็นเครื่องมือรหัสที่พัฒนาโดย Hashicorp เป็นเครื่องมือที่มีความแม่นยำสูงและครบถ้วน ซึ่งไม่เพียงแต่รองรับ AWS เท่านั้น แต่ยังรวมถึงผู้ให้บริการระบบคลาวด์รายอื่นๆ ด้วย Terraform รองรับบริการของ AWS ทั้งหมด และชุมชนการพัฒนาสามารถเลือกคุณสมบัติใหม่ที่ AWS เพิ่มลงในบริการได้อย่างรวดเร็ว ช่วยให้เราสามารถเขียนโค้ดในภาษาที่พัฒนาแล้วของ Hashicorp (HCL) HCL เป็นภาษาที่คล้ายกับ JSON สำหรับการกำหนดทรัพยากรโครงสร้างพื้นฐาน

  วิธีจัดระเบียบห้องสมุด Spotify ของคุณ

AWS CDK

AWS CDK เป็นตัวห่อหุ้มรอบ AWS CloudFormation เพื่อให้เข้าใจการทำงานของ AWS CDK คุณควรรู้เล็กน้อยเกี่ยวกับ AWS CloudFormation AWS CloudFormation เป็นเครื่องมือที่จัดการโดย AWS ซึ่งช่วยให้เราสามารถกำหนดโครงสร้างพื้นฐานของ AWS ในรูปแบบ YML หรือ JSON แม้ว่าการอ่าน JSON และ YML จะเป็นเรื่องง่าย แต่ก็ไม่ใช่ภาษาโปรแกรมจริง ไม่มีการสนับสนุนแบบเนทีฟสำหรับลูปและฟังก์ชัน ซึ่งทำให้การบำรุงรักษาโครงสร้างพื้นฐานขนาดใหญ่ยากขึ้นเรื่อยๆ นี่คือที่มาของ AWS CDK

AWS CDK เป็นโปรแกรมห่อหุ้ม AWS CloudFromation ที่ช่วยให้คุณใช้ภาษาการเขียนโปรแกรมที่คุ้นเคย เช่น – JAVA หรือ Python เพื่อจัดเตรียมโครงสร้างพื้นฐานของคุณ ทำให้ง่ายต่อการเขียนและดูแลโค้ด

Terraform กับ AWS CDK: ความแตกต่าง

#1. ภาษาและความสะดวกในการใช้งาน

ภาษาและความง่ายในการใช้งานมีความสำคัญต่อการทำความเข้าใจความแตกต่างระหว่าง AWS CDK และ Terraform

เรามาพูดถึง Terraform กันก่อน Terraform ใช้ภาษาที่คล้ายกับ JSON เพื่อกำหนดทรัพยากรและข้อมูลอื่นๆ, HCL หรือภาษาการกำหนดค่า HashiCorp มันค่อนข้างตรงไปตรงมา และเอกสารประกอบนั้นง่ายต่อการเข้าใจและปฏิบัติตาม แม้แต่สำหรับผู้เริ่มต้น

ให้เราดูรหัสเพื่อสร้างถัง S3

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

รหัสนี้ค่อนข้างง่ายต่อการอ่าน และคุณสามารถดูพารามิเตอร์อื่น ๆ ที่ทรัพยากรนี้สนับสนุนใน เอกสาร Terraform.

ดังที่ได้กล่าวไว้ก่อนหน้านี้ AWS CDK เป็นโปรแกรมห่อหุ้ม CloudFormation ที่ช่วยให้เรากำหนดทรัพยากรในภาษาการเขียนโปรแกรมได้ ให้เราดูโค้ด AWS CDK เพื่อสร้างบัคเก็ต S3

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';

export class BucketStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new s3.Bucket(this, 'MyFirstBucket', {
      bucketName: 'my-first-bucket',
    });
 }
}

โค้ด Terraform อาจดูเรียบร้อยกว่า CDK เล็กน้อย แต่ทั้งโค้ด Terraform และ CDK ค่อนข้างเรียบง่าย หากคุณวางแผนที่จะใช้ IAC สำหรับโครงการขนาดเล็ก ทั้ง Terraform และ CDK เป็นตัวเลือกที่ยอดเยี่ยมในแง่ของภาษาและความสะดวกในการใช้งาน

  วิธีรับโหมดกลางคืนบน iPhone SE 3

อย่างไรก็ตาม เมื่อเลือกเครื่องมือ IAC ที่เหมาะสมกับโครงการขนาดใหญ่ที่มีนักพัฒนาหลายคน Terraform มีข้อเสียเปรียบ ความเรียบง่ายของ Terraform คือภาษาใหม่และคุณจะต้องฝึกอบรมนักพัฒนาของคุณในภาษาใหม่ที่ไม่เหมือนกับภาษาโปรแกรมอื่นๆ ที่ใช้งานอยู่ ที่สำคัญกว่านั้น การจัดการข้อมูลใน Terraform นั้นไม่ง่ายเหมือนในภาษาโปรแกรมอื่นๆ ตัวอย่างเช่น การวนซ้ำผ่านรายการและอ็อบเจ็กต์และการแปลงค่านั้นไม่ง่ายนัก โดยเฉพาะสำหรับผู้เริ่มต้น

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

#2. ขอบเขต

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

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

AWS CDK เป็นข้อเสนอของ AWS สำหรับ IAC เนื่องจาก CDK มีประสิทธิภาพและเติบโตเต็มที่ จึงจำกัดเฉพาะ AWS Cloud เท่านั้น

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

#3. ประสิทธิภาพ

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

Terraform จะทำงานเร็วกว่า AWS CDK เล็กน้อย โดยเฉพาะอย่างยิ่งเนื่องจากเวลาที่ CDK ใช้ในการแปลงโค้ดเป็นเทมเพลต CloudFormation

#4. ความเป็นโมดูล

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

ใน AWS CDK คุณสามารถสร้างฟังก์ชัน คลาส และแชร์โค้ดนี้ที่นำมาใช้ซ้ำได้ภายในองค์กรของคุณเพื่อให้ได้ผลลัพธ์แบบเดียวกัน นี่เป็นข้อดีอย่างมากใน AWS CDK ในฐานะเครื่องมือ AWS IAC อื่นๆ – CloudFormation ไม่อนุญาตให้คุณสร้างและนำโค้ดมาใช้ซ้ำเป็นโมดูล คุณสามารถใช้สแต็กที่ซ้อนกันใน CloudFormation เพื่อให้เป็นไปตามข้อกำหนดนี้ แต่การใช้ AWS CDK เป็นทางเลือกที่เหมาะสมกว่ามาก

  Disney Plus ไม่โหลด? นี่คือวิธีแก้ไขปัญหาการบัฟเฟอร์ของ Disney Plus

โดยรวมแล้วเครื่องมือทั้งสองมีความคล้ายคลึงกันในด้านนี้

#5. การควบคุมและการกำกับดูแล

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

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

บทสรุป

เนื่องจาก AWS CDK ใช้ CloudFormation ภายใน เราขอแนะนำให้คุณอ่านบทความ CloudFormation กับ Terraform เพื่อทำความเข้าใจความแตกต่างระหว่าง AWS CDK และ Terraform

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

เรื่องล่าสุด

x