AWS CloudFormation คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

นี่เป็นบทความที่มีเนื้อหาดัดแปลงมาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS再入門2022 AWS CloudFormation編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอัพเดทเนื้อหาบางอย่างเพื่อให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.11.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับทุกคน กุมซางวอน ครับ

รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว

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

งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "AWS CloudFormation" ครับ

CloudFormation คืออะไร

IaC Service ที่ทำการจัดการหรือ Provisioning Resource Collection ของ AWS หรือ Third Party ที่ใช้กับสภาพแวดล้อมการพัฒนา หรือ ใช้งานจริง ด้วยคำสั่งที่เหมาะสมที่สามารถคาดการได้

ค่าใช้จ่าย

คิดค่าใช้จ่ายตามเท่าที่ใช้งาน้ท่านั้น ไม่มีค่าใช้จ่ายในส่วนค่าใช้จ่ายขั้นต่ำที่ต้องจ่ายก่อนใช้งาน หรือ ค่า resource provider ใน namespace

โปรดระวัง!:ในกรณีของ(: AWS::、Alexa::、Custom::*) ที่ใช้กับ AWS Resource(พวก EC2) จะมีค่าใช้จ่ายครับ

Free Tier

  • Free Tier: 1,000 handler operations ต่อเดือน ต่อ account
  • Handler operations: 0.0009 USD ต่อ handler operation *

ราคา Third party resource provider ที่นอกจาก (: AWS::、Alexa::、Custom::*)

  • Free Tier: 1,000 handler operations ต่อเดือน ต่อ account
  • Handler operations: 0.0009 USD ต่อ handler operation *
  • ระยะเวลา Handler operations: 0.00008 USD ต่อ 1 วินาที

จุดเด่น

ที่มา: AWS CloudFormation Features

Extensibility

เมื่อใช้ AWS CloudFormation Registry คุณสามารถสร้างโมเดลและจัดเตรียมทรัพยากรและโมดูลของ third-party ที่เผยแพร่โดยคู่ค้า AWS Partner Network (APN) และdeveloper community ตัวอย่างของทรัพยากรของบุคคลที่สาม ได้แก่ การตรวจสอบ ประสิทธิผลของทีม การจัดการเหตุการณ์ และเครื่องมือควบคุมเวอร์ชัน พร้อมด้วยทรัพยากรจากคู่ค้า APN เช่น MongoDB, Datadog, Atlassian Opsgenie, JFrog, Trend Micro, Splunk, Aqua Security, FireEye, Sysdig, Snyk , Check Point, Spot โดย NetApp, Gremlin, Stackery และ Iridium คุณยังสามารถเรียกดู ค้นพบ และเลือกจากคอลเลกชั่นโมดูลที่สร้างไว้ล่วงหน้าโดย JFrog และ Stackery ควบคู่ไปกับการดูแลโดย AWS Quick Starts

คุณสามารถสร้างผู้ให้บริการทรัพยากรของคุณเองได้โดยใช้ AWS CloudFormation CLI ซึ่งเป็นเครื่องมือ open-source ที่ปรับปรุงกระบวนการพัฒนา ซึ่งรวมถึง local testing และ code generation capabilities

Cross account & cross-region management

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

Authoring with JSON/YAML

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

Authoring with familiar programming languages

ด้วย AWS Cloud Development Kit (AWS CDK) คุณสามารถกำหนดสภาพแวดล้อมระบบคลาวด์ของคุณได้โดยใช้ TypeScript, Python, Java และ .NET AWS CDK เป็นเฟรมเวิร์กการพัฒนาซอฟต์แวร์โอเพนซอร์สที่ช่วยคุณสร้างแบบจำลองทรัพยากรแอปพลิเคชันระบบคลาวด์โดยใช้ภาษาการเขียนโปรแกรมที่คุ้นเคย จากนั้นจัดเตรียมโครงสร้างพื้นฐานของคุณโดยใช้ CloudFormation โดยตรงจาก IDE ของคุณ CDK มีส่วนประกอบระดับสูงที่กำหนดค่าล่วงหน้าทรัพยากรระบบคลาวด์ด้วยค่าเริ่มต้นที่พิสูจน์แล้ว ดังนั้น คุณจึงสามารถสร้างแอปพลิเคชันระบบคลาวด์โดยไม่จำเป็นต้องเป็นผู้เชี่ยวชาญ เรียนรู้เพิ่มเติมเกี่ยวกับ AWS CDK

Build serverless applications with SAM

สร้างแอปพลิเคชันแบบไร้เซิร์ฟเวอร์ได้เร็วขึ้นด้วย AWS Serverless Application Model (SAM) ซึ่งเป็นเฟรมเวิร์กโอเพนซอร์สที่มี shorthand syntax สำหรับฟังก์ชัน Express, API, ฐานข้อมูล และการจับคู่แหล่งที่มาของเหตุการณ์ ด้วยทรัพยากรเพียงไม่กี่บรรทัด คุณสามารถกำหนดแอปพลิเคชันที่คุณต้องการและสร้างแบบจำลองโดยใช้ YAML ในระหว่างการปรับใช้ SAM จะแปลงและขยายไวยากรณ์ SAM เป็นไวยากรณ์ CloudFormation

Safety controls

CloudFormation ทำการจัดเตรียมและอัปเดตโครงสร้างพื้นฐานของคุณโดยอัตโนมัติในลักษณะที่ปลอดภัยและควบคุมได้ ไม่มีขั้นตอนหรือการควบคุมแบบแมนนวลที่อาจนำไปสู่ข้อผิดพลาด คุณสามารถใช้ Rollback Triggers เพื่อระบุการแจ้งเตือน CloudWatch ที่ CloudFormation ควรตรวจสอบในระหว่างขั้นตอนการสร้างและอัปเดตสแต็ก หากมีการแจ้งเตือนใดๆ CloudFormation จะย้อนกลับการดำเนินการสแต็กทั้งหมดกลับเป็นสถานะที่ปรับใช้ก่อนหน้านี้

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

Preview changes to your environment

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

Dependency management

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

Template

เอกสาร CloudFormation สามารถเขียนได้ในรูปแบบ YAML และ JSON หากเราทำการเขียนในรูปแบบ YAML จะสามารถเขียนคอมเมนต์อธิบายได้ และทาง AWS ได้แนะนำให้เราใช้รูปแบบ YAML ด้วยครับ

AWSTemplateFormatVersion: '2010-09-09'
Description: 'CloudFormation Template Test'
Resources:
  # VPC
    TestVPC:
      Type: AWS::EC2::VPC
      Properties:
        CidrBlock: '10.0.0.0/16'
        EnableDnsSupport: 'true'
        EnableDnsHostnames: 'true'
        InstanceTenancy: 'default'
        Tags:
        - Key: Name
          Value: 'test-vpc'

  # InternetGateway
    TestInternetGateway:
      Type: AWS::EC2::InternetGateway
      Properties:
        Tags:
          - Key: Name
            Value: 'test-igw'
    TestAttachment:
      Type: AWS::EC2::VPCGatewayAttachment
      Properties:
        VpcId: !Ref TestVPC
        InternetGatewayId: !Ref TestInternetGateway

  # Subnet
    TestPrivateSubnet:
      Type: AWS::EC2::Subnet
      Properties:
        AvailabilityZone: 'ap-northeast-1a'
        CidrBlock: '10.0.0.0/24'
        VpcId: !Ref TestVPC
        Tags:
          - Key: Name
            Value: 'test-private-subnet'
    TestPublicSubnet:
      Type: AWS::EC2::Subnet
      Properties:
        AvailabilityZone: 'ap-northeast-1c'
        CidrBlock: '10.0.1.0/24'
        VpcId: !Ref TestVPC
        Tags: 
          - Key: Name
            Value: 'test-public-subnet'

  # RouteTable
    TestPublicRouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId: !Ref  TestVPC
        Tags:
          - Key: Name
            Value: !Sub  test-public-rtb

    TestPublicRoute:
      Type: AWS::EC2::Route
      Properties:
        RouteTableId: !Ref  TestPublicRouteTable
        DestinationCidrBlock: 0.0.0.0/0
        GatewayId: !Ref  TestInternetGateway

  # Subnet to attach
    TestPublicSubnetRouteTableAssociation:
      Type: AWS::EC2::SubnetRouteTableAssociation
      Properties:
        SubnetId: !Ref TestPublicSubnet
        RouteTableId: !Ref TestPublicRouteTable

โดย Template ด้านบนที่เราเห็นนี้จะเป็นตัวอย่างที่จะใช้ในบทความนี้ โดยเป็น Template ที่ใช้สร้าง VPC โดยง่าย โดยเราจะมาดูกันไปพร้อมกับอธิบายกันไปครับ

AWSTemplateFormatVersion

ส่วน AWSTemplateFormatVersion (ไม่บังคับ) จะระบุความสามารถของเทมเพลต เวอร์ชันรูปแบบเทมเพลตล่าสุดคือ 2010-09-09 ซึ่งปัจจุบันเป็นค่าเดียวที่ถูกต้องและใช้กัน

Description

ตัวอักษรที่เขียนเกี่ยวกับคำอธิบายของ Template

Resources

ในส่วนของ Resources session เราจะประกาศ AWS Resource ที่จะใช้ใน stack

Logical ID

ชื่อ ID เฉพาะ ที่เขียนใน Template ด้วยตัวอักษรอังกฤษและตัวเลข(A-Za-z0-9) Logical ID จะใช้เมื่ออ้างอิง resource ใน template (เช่น TestVPC, InternetGateway)

Type

การกำหนดประเภทของ Resource Type ว่าใช้ "ทำเพื่ออะไร"

Properties

Properties คือ specific settings ทำการกำหนดด้วย Service หัวข้อการตั้งค่าจะต่างออกไปตาม Resource Type เช่น "Subnet" จะมี Properties คือ "AvailabilityZone", "CidrBlock", "VpcId", "Tags" ครับ

Intrinsic function reference

คำสั่ง !Ref จะส่งข้อมูลเกี่ยวกับ Resource หรือ Parameter ที่ถูกเลือกกลับมา ยกตัวอย่างเช่น ในตอนที่เราสร้าง "Subnet" จำเป็นต้องมี "VPC ID" แต่เราไม่รู้ว่า "VPC ID" คืออะไร เพราะสร้างใน template เดียวกัน แต่ถ้าสร้างโดยใช้ stack โครงสร้างของเราจะถูกสร้างตามลำดับของไฟล์ YAML ทำให้ VPC ถูกสร้างก่อน Subnet ทำให้เราสามารถตั้งค่า "VPC ID" ได้โดยการใช้ !Ref นั่นเอง

Intrinsic function reference อื่นๆ

สำหรับ Intrinsic function reference อื่นๆ ท่านผู้อ่านสามารถตรวจสอบได้ที่ลิ้งค์ด้านล่างนี้

ลองใช้ CloudFormation

ก่อนอื่นผมทำการ Copy Template ด้านบน แล้วนำไปใช้สร้างไฟล์ YAML

ไปที่ AWS CloudFormation ใน AWS Console แล้วทำการกด "Create stack" ครับ

Stack คืออะไร?

หน่วย 1 หน่วย Unit ที่ใช้เก็บคอลเลคชั่นของ AWS Resource สำหรับจัดการควบคุมครับ หรือก็คือ Stack ใช้สำหรับ สร้าง อัพเดท ลบ คอลเลคชั่นของ AWS Resource นั่นเองครับ

เลือก "Template is ready" จากนั้นเลือก "Upload a template file" จากนั้นเลือกอัพโหลด Template File ที่เราสร้างขึ้น แล้วกดปุ่ม "Next" ครับ

ทำการตั้งชื่อ Stack name แล้วกดปุ่ม "Next" ครับ

ใส่ "Tags" แล้วทำการเลือกด้านล่างว่า หาก file YAML เกิดความผิดพลาดจะเลือก "Roll back all stack resources" หรือเลือก "Preserve successfully provisioned resources" ครับ

ทำการตั้งค่าเพิ่มเติมหากมีใน Advanced options แล้วกดปุ่ม "Next" ครับ

กดปุ่ม "Submit" เพื่อสร้าง stack ครับ

เราสามารถตรวจสอบ Resource ที่สร้างเสร็จแล้วโดยกด "Resources" แล้วกด "Physical ID" ครับ

ฟังก์ชัน CloudFormation

Updating stacks using change sets

ในกรณีที่จำเป็นต้องอัพเดท stacks เราสามารถเลือกได้ที่จะดำเนินการอัพเดท stack ตามแผน หรือเลือกที่จะสร้าง change set อื่น แล้วลองตรวจสอบการเปลี่ยนแปลงเพื่อเช็คผลกระทบที่จะเกิดขึ้นหลังจากการอัพเดทได้

Detect drift on an entire CloudFormation stack

เราสามารถใช้ Detect drift เพื่อตรวจสอบการตั้งค่าของ Stack resource ที่ถูกเปลี่ยน ที่อยู่นอกการควบคุมของ CloudFormation ได้ครับ หลังจากนั้นสามารถ sync ให้ Stack resource ดำเนินการตาม stack template ที่ถูกตั้งค่าไว้ได้ครับ

StackSets

หากเราใช้ StackSets จะทำให้เราสามารถใช้ 1 AWS CloudFormation Template เพื่อสร้าง stack กับ หลาย Region หรือ หลาย AWS Accounts ได้

(ข้อควรระวัง: กรณีที่สร้าง Stack มาใน 1 Region จะไม่สามารถตรวจสอบหรือเปลี่ยนแปลง Stack ใน Region อื่นได้)

Bringing existing resources into CloudFormation management

หากเราสร้าง AWS Resource ที่อยู่นอกการจัดการของ AWS CloudFormation เราสามารถนำ Resource ที่มีอยู่นี้เข้าสู่การจัดการ AWS CloudFormation โดยใช้ resource import ได้ เราสามารถจัดการทรัพยากรของคุณโดยใช้ AWS CloudFormation ได้ โดยไม่ต้องลบและสร้างใหม่ให้เป็นส่วนหนึ่งของ stack

AWS CloudFormation Designer

AWS CloudFormation Designer (Designer) เป็นเครื่องมือกราฟิกสำหรับสร้าง ดู และแก้ไข AWS CloudFormation template เมื่อใช้ Designer คุณสามารถสร้างdiagram your resources template ของคุณโดยใช้อินเทอร์เฟซแบบลากแล้วปล่อย จากนั้นแก้ไขรายละเอียดโดยใช้ตัวแก้ไข JSON และ YAML ที่ผสานรวม

troubleshoot provisioning errors before rollback, accelerating deployments

ในตอนที่เราทำการดำเนินการ stack ของ CloudFormation เราสามารถหยุดการ Rollback ที่จะลบ Resource ทั้งหมดหากเกิด error ขึ้น แล้วย้อนไปส่วนก่อนที่จะเกิด erorr แทน แล้วปรับโค้งสร้างเพื่อให้ไม่เกิด error ขึ้นได้

A Library of Architecture Patterns for the AWS CDK

เราสามารถใช้ Programming language ที่เราต้องการกับ AWS CloudFormation ในการ provisioning resource จัดการ Infrastructure ด้วย code

A Library of Architecture Patterns for the AWS CDK

aws-cfn-template-flip ที่ AWS เปิดให้ใช้งานอยู่ จะทำให้เราสามารถเปลี่ยนรูปแบบของ AWS CloudFormation template ไปมาระหว่าง JSON และ YAML ได้ และนี่เป็น Open Source ที่ AWS เปิดให้ใช้งานจึงสามารถใช้ได้โดยไม่ต้องกังวลถึงปัญหาเรื่องความปลอดภัย

ข้อดี/ข้อเสียของ CloudFormation

ข้อดี

  • สามารถควบคุมได้ด้วย Code
    สามารถตรวจสอบการตั้งค่าต่างๆ ผ่าน code ได้ ทำให้สามารถแชร์ หรือนำเสนอข้อมูลได้ง่าย
  • ใช้งานซ้ำได้
    เราสามารถนำโค้ดไปทำสภาพแวดล้อมซ้ำหรือคล้ายกันได้โดยลดข้อผิดพลาด และ ย่นเวลาในการติดตั้งต่างๆ
  • มีบันทึกหลงเหลืออยู่
    เราสามารถตรวจสอบได้ว่าเราทำอะไรไปแล้วบ้าง
  • Infrastructure management ได้ง่าย
    เราสามารถลบ สภาพแวดล้อมที่เราสร้างขึ้นได้ทั้งแถบ ไม่ต้องมานั่งลบที่ละอัน

ข้อเสีย

  • ต้องตั้งค่าหลายอย่าง
    เพราะตั้งค่าได้หลายอย่างทำให้ต้องตรวจสอบหลายเหมือนกัน Tips คือไปตรวจสอบหัวข้อที่จำเป็นต้องว่าต้องทำอะไรบ้าง
  • รูปแบบของ JSON และ YAML
    หากเราไม่เคยใช้ JSON และ YAML มาก่อนอาจจะเสียเวลาในการศึกษา built-in function หรือรูปแบบการเขียนต่างๆ

สรุป

สำหรับบทความนี้ก็ได้รวบข้อมูลเกี่ยวกับ CloudFormation เลื้องต้นมาแนะนำให้อ่านกันแล้วครับ หากท่านผู้อ่านต้องการศึกษาเพิ่มเติมสามารถดูได้ 2 ลิ้งค์ด้านล่างนี้ได้เลยครับ

บทความต้นฉบับ

AWS再入門2022 AWS CloudFormation編 | DevelopersIO

บทความที่เกี่ยวข้อง