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

Recent Posts

Popular post of 7 days

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

Portal คืออะไรกันนะ???

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

Portal คืออะไรกันนะ???

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

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

Port Forwarding สำหรับคนใช้ AIS Fibre

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

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

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง