Infrastructure as Code การสร้างโครงข่ายด้วยการเขียนโปรแกรม บน AWS (Amazon Web Services)

          หลังจากที่ได้เล่น AWS โดยใช้งานผ่าน User Interface ไปแล้ว โพสนี้จะมาแนะนำการสร้าง services ต่าง ๆ ผ่าน code กันบ้างหรือที่เรียกว่า "Infrastructure-as-Code" โดย AWS ก็มี service ที่รองรับอยู่แล้ว
          AWS CloudFormation ถูกสร้างมาเพื่อให้เราสามารถสร้าง services ได้ด้วยการเขียน code นำมาแสดงใน template designer และสร้าง resource ขึ้นมาใช้งานจริงๆ 

          ในส่วนการเขียน code ใช้ JSON เขียน โดย AWS จะเรียกว่า template ซึ่งรายละเอียดต่าง ๆ จำเป็นต้องใช้ AWS CloudFormation Template Reference ประกอบ เพราะมันเยอะมากกกจริงๆ
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "AWS Stack, Infrastructure as Code",
    "Resources": {
        "WebServerInstance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "ami-f068a193",
                "InstanceType": "t2.micro",
                "SubnetId": "subnet-bd45f8d9",
                "KeyName": "gift-keypair",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "my-ec2"
                    }
                ]
            }
        }
    }
}
          เราสามารถกำหนด Parameters เพื่อใส่ค่าภายหลังได้ ซึ่งตรงนี้สามารถเล่นได้หลากหลาย เช่น ทำเป็น dropdown หรือเลือกจากที่มีก็ได้ โดยตัวอย่างนี้มี parameter 2 ตัว คือ
  1. ParamInstanceName ให้กรอกชื่อ instance ของ EC2 
  2. ParamKeyName เลือก keypair สำหรับ EC2
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "AWS Stack, Infrastructure as Code",
    "Parameters": {
        "ParamInstanceName": {
            "Description": "WebServer EC2 Instance Name",
            "Type": "String",
            "Default": "my-ec2"
        },
        "ParamKeyName": {
            "Description": "WebServer EC2 Instance KeyPair Name",
            "Type": "AWS::EC2::KeyPair::KeyName"
        }
    },
    "Resources": {
        "WebServerInstance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "ami-f068a193",
                "InstanceType": "t2.micro",
                "SubnetId": "subnet-bd45f8d9",
                "KeyName": {
                    "Ref": "ParamKeyName"
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": {
                            "Ref": "ParamInstanceName"
                        }
                    }
                ]
            }
        }
    }
}
          เมื่อเขียนเสร็จแล้ว เราสามารถ upload ไปให้ CloudFormation ตรวจสอบได้บน Template Designer ซึ่งถ้ามีบางอย่างไม่ถูกต้องจะมีการแจ้งเตือนก่อน ถ้าไม่มีปัญหาก็จะแสดง infrastructure มาเป็นภาพให้เราเห็น
**ภาพประกอบไม่เกี่ยวกับ template ด้านบนนะฮะ**

          หลังจากนั้นเราก็ต้องสร้าง stack, stack คือ resource จริง ๆ ที่ได้จาก template ที่เราเขียน ซึ่งหลังจากสร้าง stack ก็จะให้ใส่ค่า parameter ตอนนี้ และสร้างออกมาเป็น resource เช่น EC2, VPC ทันที


          ถ้าเราต้องการแก้ไข/เปลี่ยนแปลง เราสามารถ update stack ได้ เพื่อให้ AWS ตรวจสอบเองว่า อะไรที่แก้ไข หรือมี resource อะไรเพิ่มมา โดยเราไม่ต้องตรวจสอบเอง และถ้าในอนาคต เราไม่ต้องการใช้งาน resource เหล่านั้นแล้ว เราสามารถ delete stack ซึ่งจะเป็นการลบ resource ที่ stack นี้สร้างมาทั้งหมด

*ถ้าเป็นการทดสอบอย่าลืมลบออกนะครับ เดี๋ยวเสียตังค์ :D

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

Facebook Comment

Popular post of 7 days

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)