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 ที่ชัดเจน ทำให้การใช้งานแต่ละค่าย มีความเฉพาะเจาะจงของตัวเอง และก็ยังคงแข่งขันกันไปได้เรื่อยๆ เพราะคงไม่มีอะไรดีที่สุดสำหรับทุกงานครับ



