สาธิตการติดตั้ง Azure — PaaS สำหรับ การ Migrate ASP.Net Core 2 และ Entity Framework Core
สวัสดีครับ ในตัวบทความนี้ ผมจะสาธิตวิธีการ ใช้ PaaS (Platform as a Service) ของ Azure เพื่อวาง Web และ Database ที่รันด้วย ด้วย Technology Stack ดังนี้น่ะครับ
- Server: Azure PaaS (App Service, SQL Database)
- Web Framework: ASP.Net (Core 2, Entity Framework Core, Web API with Swagger, JWT Token)
ปล.บทความนี้มีขั้นตอนค่อนข้างเยอะ เลยจะมีเนื้อหาที่ยาวมากน่ะครับ
การใช้งานในรูปแบบ PaaS จะช่วยให้เราจัดการ Server ได้ง่ายขึ้น เพราะเน้นดูแค่ โปรแกรมและข้อมูลที่ใช้ ส่วนอื่นๆทาง Azure จะเป็นคนดูแลให้ครับ เช่น Windows เราก็ไม่ต้องคอย update หรือ จัดการกับ ความปลอดภัยต่างๆด้วยตัวเราเอง
ผมขอยกตัวอย่างภาพประกอบข้างล่างน่ะครับ
ขั้นตอนการติดตั้ง
- สร้าง Subscription
- สร้าง Resource Group
- สร้าง Storage Account
- Import Backup Existing Database
- สร้าง Cloud Database Server
- ย้าย Existing Database to Cloud Database Server
- สร้าง App Service Plan
- สร้าง App Service
- สร้าง Sendgrid
Azure Subscription
Subscription จะเกี่ยวข้องกับค่าใช้จ่ายครับ เพราะงั้นเราจึงควรแยก subscription แบ่งออกตาม ลูกค้า หรือ project เพื่อให้เห็นค่าใช้จ่ายได้ชัดเจนครับผม
- Log in to Azure Portal https://portal.azure.com/
- Click subscription on the left menu, click add
- Select Pay-As-You-Go
- Add all required fields. Then click purchase.
Azure Resource Group
Resource Group จะเกี่ยวกับการจัดหมวดหมู่ของ Azure Resource เข้าด้วยกันเพื่อง่ายต่อการจัดการน่ะครับ เช่น สร้าง Group Dev สำหรับ Resource ทั้งหมดที่เกี่ยวกับ Development ซึ่ง เวลาลบเราสามารถลบได้ทั้ง Group เลยในครั้งเดียว
- Click resource groups, then click add
- Resource group Name = <New Resource Group Name>
- Subscription = <Existing Subscription>
- Resource group location = Southeast Asia
Azure Storage Account
เราจะใช้ Storage Account เพื่อทำการเก็บ Database Backup File จาก Server อื่นเพื่อนำมา Deploy ต่อใน Azure Cloud Database ครับ
- Click storage accounts, then click add
- Name = <New Storage Account Name>
- Deployment Model = Resource Manager (Recommended by Microsoft)
- Account Kind = Blob storage (To store only blob, no table, quence, file)
- Performance = Standard (to use HDD to reduce cost)
- Replication = LRS (Chepest, replicate to 3 machine in the same region)
- Access tier = Cool (for backup file only)
- Secure transfer required = false
- Subscription = <Existing Subscription>
- Resource Group = <Existing Group>
- Location = Southeast Asia (Location in Thailand)
- Disable secure connection
หลังจากได้ Storage Account แล้ว ขั้นต่อไปเราจะสร้าง Container ไว้ใช้ในนั้น (มองเสมือน Storage Account เป็น Drive, Container เป็น Folder)
- Access to the storage to create container
- Name = <New Container Name>
- Public access level = Private
Backup Existing Database
เราจะทำการ migrate database ที่เราทำไว้ ย้ายมาอยู่ที่ Azure Cloud Database ซึ่งมี ข้อจำกัดตรงที่ต้องเป็น File ประเภท Data-tier Applications (.bacpac) เท่านั้น และไม่สามารถ ทำการ query ข้าม database
ในบทความนี้ผมทำ ผ่าน MSSQL Express 2016 + Microsoft SQL Server Management Studio 13 (SSMS)น่ะครับ
- Access SSMS
- Right click on the database
- Select Export Data-tier Application
Azure Storage Explorer
เพื่อความสะดวกในการเข้าถึง Storage Account ผมแนะนำให้ download Microsoft Azure Storage Explorer มาใช้น่ะครับ
- Download azure storage tool from Azure SDK website https://azure.microsoft.com/en-us/features/storage-explorer/
- Open azure storage explorer tool and upload db backup to the container.
Azure SQL Server
Azure SQL Server จะถูกมองในลักษณะเป็นที่รวม logical database links เข้าด้วยกัน กล่าวคือ database แม้ว่าอยู่ใน Server เดียวกัน แต่จริงๆ อาจจะอยู่แยกเครื่องกัน และไม่สามารถ query ข้าม database ได้
- Click SQL server, then click Add
- Server name = <New Database Server Name>
- Server admin login = <New db admin user>
- Subscription = <Existing Subscription>
- Resource Group = <Existing Resource Group>
- Location = Southeast Asia
Azure Database จะมี Firewall กันไม่ให้สามารถติดต่อเครื่องได้โดยตรง เพราะงั้นต้อง ปรับแก้ Firewall ด้วย
- Allow local machine to access through firewall
Migrate existing database to cloud database
ทำการ migrate database ที่เรา import มาไว้ใน storage account นำไปใส่ไว้ใน database ที่เราพึ่งติดตั้ง
- SQL Server >> select new server >> Import
ประสิทธิภาพของ Azure database จะมีหน่วยวัดเป็น DTU ซึ่งจะผูกอยู่กับ Database โดยตรง ซึ่ง ถ้า DTU มีค่ามากขึ้นก็หมายถึงว่า Database นั้นทำงานได้มีประสิทธิภาพมากขึ้น
- Subscription = <Existing Subscription>
- Storage = <Existing Storage Account> (เลือก db backup file ที่อยู่ใน container ที่เราพึ่งสร้างไว้)
- Pricing Tier = Basic (Cheapest, 5 DTU, 4.99 USD)
- Database = <New Database Name>
App Service Plan
App Service Plan จะถูกมองเสมือนว่าเป็น Web Server ที่เราจะใช้ในการ host web ย่อยๆอยู่ภายในครับ (App Service) ซึ่งเราจำเป็นต้องเลือก package แบบ standard เพื่อทำให้สามารถ Backup web และ database ได้ (ไม่เกิน 1 เดือนย้อนหลัง)
- App Service plan = <New App Service Plan>
- Subscription = <Existing Subscription>
- Resource Group = <Existing Group>
- Operating System = Windows
- Location = Southeast Asia
- Pricing tier = S Standard (75 USD, ต้องใช้ package นี้จึงจะสามารถทำ auto backup ได้)
App Service
คือพื้นที่ๆใช้ในการจัดการ Application ต่างๆ ซึ่งในทีนี้เราจะใช้ในการ จัดการ Web น่ะครับ (จริงๆยังมีอีกหลายอย่างเช่น mobile app, function app)
- Select app service, click add, click web + sql
- App name = <New App Service name>
- Subscription = <Existing Subscription>
- Resource Group = <Existing Group>
- App Service Plan = <Existing Plan>
- SQL Database = <Existing Database>
- Application Insight = Off
Web Deployment
เราสามารถทำการ deploy web ได้หลายวิธี ซึ่งในบทความนี้จะใช้ 2 วิธีคือ
- Publish via Visual Studio 2017
- FTP via File Zilla
เริ่มต้นด้วยการ กด เลือก App Service Menu เพื่อทำการ download public profile
- Click overview, then click publish profile
Publish via Visual Studio 2017
- Open visual studio, right click on the web project, then select publish and import publish profile file.
- Then we can use publish feature to pushweb to azure app service directly
FTP via File Zilla
- เปิด Publish Profile file ผ่าน text editor tool และ copy credential สำหรับการต่อ FTP (Attributes: publishUrl, userName, userPWD)
- ทดลองต่อ FTP ผ่าน FireZilla และนำ HTML files ของเราไปติดตั้ง
- ทำการ copy & paste HTML files ของเราลงใน path /site/wwwroot
Backup Web & Database
เราสามารถทำการ configure App Service ในการ backup ทั้ง web และ database ให้โดยอัตโนมัติครับ แต่จำเป็นต้อง ใช้ App Service Plan ใน package standard เป็นต้นไป
- Select <Existing Storage Account> to store backup files
- Set schedule
- Check Included Database to include database backup too
ทดลอง Backup files ที่เกิดขึ้น
- Open Azure Storage Explorer to view the backup file
- Try to download and unzip. Web + Database appear.
- DB
- Web
ตัวอย่าง Web API ที่รัน บน Azure
เพิ่มเติม
ผมตั้งใจว่า จะเขียนอีก 2 บทความที่เกี่ยวกับ Azure น่ะครับ
- ติดตั้ง Azure IaaS with Virtual Machine, Windows Server 2016 Data Center and MSSQL 2014 Express
- ติดตั้ง Azure IaaS with Virtual Machine, Ubuntu 16.04 with ASP.Net Core 2 and connect to other database เพื่อทดสอบว่า เราสามารถรัน asp.net core 2 บน linux ได้จริงๆ และสามารถใช้ entity framework core ในการต่อ database ที่ host อยู่ใน Microsoft server เครื่องอื่นๆได้
ขอบคุณมากๆครับ