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 ตัว คือ
- ParamInstanceName ให้กรอกชื่อ instance ของ EC2
- 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 ทันที
*ถ้าเป็นการทดสอบอย่าลืมลบออกนะครับ เดี๋ยวเสียตังค์ :D
เท่านี้ เราก็ได้รู้จัก Infrastructure as Code กันแล้ว ข้อเสียสำคัญของ Cloud คือยังไม่มี standard ที่ชัดเจน ทำให้การใช้งานแต่ละค่าย มีความเฉพาะเจาะจงของตัวเอง และก็ยังคงแข่งขันกันไปได้เรื่อยๆ เพราะคงไม่มีอะไรดีที่สุดสำหรับทุกงานครับ