SFTP on Azure with Azure Container Instance (ACI) and Azure File Share

เรียนรู้แนวทางการใช้งาน Azure Container Instance (ACI) ในการรัน Docker เพื่อใช้เป็น SFTP Server สำหรับแชร์ไฟล์ โดยเก็บ Files ไว้ที่ Azure File Share และจะลองใช้งาน Azure Resource Manager templates (ARM templates) เพื่อลดเวลาการติดตั้งลงครับ

Ponggun
T. T. Software Solution

--

FTP กับ SFTP แตกต่างกันอย่างไร

FTP (File Transfer Protocol) เป็นมาตราฐานในการโอนถ่ายไฟล์ระหว่าง Client กับ Server ในรูปแบบนึงที่ได้รับความนิยมสูง แต่ก็มีข้อเสียคือข้อมูลที่รับส่งกันนั้นไม่มีการเข้ารหัสทำให้อาจจะเกิดโอกาสที่มีบุคคลที่สามเข้าอ่านข้อมูลระหว่างทางได้ครับ

SFTP (Secure File Transfer Protocol) เป็นมาตราฐานที่ช่วยเพิ่มความปลอดภัยในการโอนถ่ายไฟล์ โดยทำการเข้ารหัสข้อมูลและคำสั่งก่อนที่จะถ่ายโอนไฟล์ระหว่าง Client และ Server ด้วย SSH (Secure Shell) ครับ ทำให้เรามั่นใจได้ว่าข้อมูลที่เรา Upload/ Download นั้นสามารถทำได้อย่างปลอดภัย ไม่ถูกบุคคลที่สามเข้าถึงได้หรือถ้าได้ข้อมูลไปก็เป็นข้อมูลที่เข้ารหัสไว้ไม่สามารถอ่านได้ครับ

https://www.educba.com/ftp-vs-sftp/

ทำไมถึงเลือก Docker Image ไม่เลือกการติดตั้งโปรแกรมบน Server โดยตรง

จริงๆเราสามารถติดตั้งโปรแกรมใน Windows ของเราเพื่อให้เป็น SFTP Server ได้เลยโดยที่ไม่ต้องใช้งาน Docker Image นะครับ

แต่ที่ผมเลือกใช้ Docker Image เป็นเพราะว่าค่าใช้จ่ายในการที่เราต้องสร้าง VM ขึ้นมาเพื่อเป็น Windows/Linux Server บน Cloud นั้นมีราคาในการดูแลรักษาที่สูงครับ (เป็น Cloud Deployment Model แบบ IaaS — Infrastructure as a Service) ทั้งเรื่องของ VM Package เอง (OS License, CPU, RAM, Disk) การสำรองข้อมูล การ Update OS Patch รวมไปถึงการดูแลรักษาความปลอดภัยครับ และก็ต้องใช้คนที่ชำนาญใน OS นั้นๆด้วยครับ

ซึ่งใน Cloud Deployment Model แบบ PaaS-Platform as a Service จะเข้ามาช่วยลดค่าใช้จ่ายในจุดนี้ได้ครับ Developer เน้นดูแลเฉพาะระบบและข้อมูลของตัวเอง ในส่วนที่เหลือให้ทาง Cloud Provider ช่วยดูแลให้แทนครับ โดยในบทความนี้เราจะทำการสร้าง Docker Image แล้วนำไปรันบน PaaS แทนครับผม ง่ายกับการติดตั้ง รวดเร็วทำซ้ำได้ และง่ายต่อการดูแลรักษาครับ แถมยังลดค่าใช้จ่ายลงได้อีกเยอะเลย

ขอบคุณภาพจาก saladpuk.com/cloud/service-types นะครับ โดยเราจะสั่งเกตุว่า IaaS นั้นเราต้องจัดการเองเยอะกว่า PaaS มากครับ ทั้งในส่วนของ Runtime, Middleware, O/S

ขั้นตอนการสร้าง SFTP ด้วย Docker บน Local Machine

ใครยังไม่ติดตั้ง WSL 2, Docker Desktop, VS Code Remote — WSL Extension ให้ติดตั้งและทดลองใช้งานเบื้องต้นตามบทความ 2 บทความนี้ก่อนนะครับ

Docker Image

เราจะใช้ Docker Image ชื่อ atmoz/sftp จาก Docker Hub ตามที่อยู่ข้างล่างนี้นะครับ ซึ่งติดตั้ง OpenSSH ไว้ให้เราแล้วเพื่อเป็น SFTP (SSH File Transfer Protocol) server ให้อย่างสะดวกรวดเร็ว

https://hub.docker.com/r/atmoz/sftp

ติดตั้ง SFTP ด้วย Docker บน Local Machine

เปิด Windows Terminal, เลือก WSL2 ของเราแล้วรันคำสั่งนี้นะครับ (หรือรันผ่าน VS Code ก็ได้ครับ)

docker run \
-v ~/upload:/home/sftpUser/upload \
-p 22:22 \
-e SFTP_USERS=sftpUser:sftpPassword:1001 \
-d atmoz/sftp:latest
  • เราทำการ mount volume จาก home directory ของ User ที่เรา Login เข้า WSL 2 ไปยัง home directory ของ User sftpUser ที่เราจะสร้างไว้บน Docker Container
  • Map SFTP port เข้าด้วยกันระหว่างเราและ Docker
  • ระบุ environment variable เพื่อสร้าง User sftpUser โดยใช้ : เป็นตั่วคั่นนะครับ ตำแหน่งแรกคือชื่อ user , ตำแหน่งที่สองคือ password , ตำแหน่งสุดท้ายคือ UID เพื่อให้เราสามารถเขียน Files บน Mounted Volumes ด้วยสิทธิที่อยู่ใน host filesystem.
ผลลัพธ์ที่ได้จากการสร้าง Docker Container นะครับ โดยดูจาก INSPECT Tab บน Docker Desktop

ทดลองเชื่อมต่อด้วย File Zilla

ติดตั้ง File Zilla โดย Download จากลิ้งนี้นะครับ

สร้าง SFTP Connection บน File Zilla

ทดลอง Connect เข้า Local SFTP ของเรา และทำการ Upload Files เข้าไป จะพบว่า Files ที่เรา Upload เข้า SFTP แล้วจะอยู่บนเครื่องของเรานะครับ แม่ว่าเราจะปิด Docker Container แล้วก็ตาม

Azure Container Instance (ACI) คืออะไร

ACI เป็นหนึ่งใน Compute Options ของ Azure โดยเน้นการบริการในการนำ Docker Image มารันเพื่อสร้างเป็น Public Endpoint ที่เข้าถึงได้บน Internet อย่างรวดเร็วครับผม

ACI เหมาะสำหรับงานประเภท ระบบขนาดเล็กๆ ที่เราสามารถเปิดและปิดการทำงานในช่วงที่เรากำหนด ไม่จำเป็นต้องเปิดรันยาวทั้งเดือนครับ ข้อดีคือจะสามารถประหยัดค่าใช้จ่ายได้เพราะ Azure คิดค่าบริการตามวินาทีที่เราเปิดใช้งานครับ ถ้าปิดก็จะไม่เสียค่าใช้จ่าย เหมาะกับงาน run-once tasks เช่น image rendering, building and testing applications, task automation, build jobs นะครับ

ดูวิธีเปิดปิด ACI แบบ Schedule ด้วย Logic App ได้ที่ลิ้งข้างล่างนะครับ

Azure Container Instance (ACI)จาก dotnet-architecture

บริการ Compute Options อื่นๆก็เช่น Virtual Machines, Azure App Service, Serverless Computing, Kubernetes ครับ โดยเราสามารถเลือกบริการได้จากตารางข้างล่างนี้นะครับ

ถ้าเป็นระบบ Websites ที่มีปริมาณการใช้งานและการปรับแต่งสูง ผมแนะนำบริการ Azure App Service for Containers ดีกว่าครับ เพราะมี Spec CPU, Memory ให้เลือกหลากหลายกว่าในการ Scale In, รวมถึงยังปรับแต่ง Scale Out ได้อีกด้วยครับ

ถ้าเราต้องการ Full container orchestration, เช่น Service Discovery, Automatic Scaling และ Coordinated Application Upgrades นั้นทาง Microsoft แนะนำให้ใช้อีกบริการนึงที่ชื่อ Azure Kubernetes Service (AKS) แทนนะครับ

Decision Tree สำหรับการเลือกใช้ Azure Compute Options จาก docs.microsoft.com
อีก 1 ทางเลือกในการรัน Website ด้วย Azure App Service (Code, Container)

ACI Pricing

ค่าใช้จ่ายจะคิดเหมาจ่ายเป็น Package รายเดือน แต่จะคิดเฉพาะเวลาที่เราเปิด Server นั้นครับ ถ้าเราปิด Server ไว้จะไม่เสียค่าใช้จ่ายในส่วนนี้(เฉพาะ CPU, Memory นะครับ แต่ถ้าเป็น Disk ยังคงเสียเหมือนเดิม)

ตัวอย่างเช่นเราเปิดระบบไว้ 5 วันใน 1 เดือน จะมีค่าใช้จ่ายในส่วนของ CPU, Memory แค่ 5 วันครับ ไม่ต้องเหมาจ่ายทั้งเดือน

ราคาของ ACI แบ่งตาม CPU และ Memory

ตัวอย่างการคำนวน

เราสร้าง ACI — Linux Container โดยมี 1 vCPU, 1 GB เพื่อทดลองเปิดรันแค่ 1 ชั่วโมง (3,600 วินาที) เสร็จแล้วก็ปิด ACI เพื่อประหยัดค่าใช้จ่าย

Memory duration = Number of container groups * memory duration (seconds) * GB * price per GB-s

1 container group * 3,600 seconds * 1 GB * $0.0000015 per GB-s

= $0.0054

vCPU duration = Number of container groups * vCPU duration (seconds) * vCPU(s) * price per vCPU-s

1 container groups * 3,600 seconds * 1 vCPU * $0.0000135 per vCPU-s days

= $0.0486

Total billing = Memory duration (seconds) + vCPU duration (seconds) = total cost

= $0.0054 + $0.0486 = $0.054

มาลองดูค่าใช้จ่ายจริงจากการเปิด ACI (1 vCPU, 1 GB) ทิ้งไว้ทั้งเดือนนะครับ

ตัวอย่างค่าใช้จ่ายจริงแบบเปิดทิ้งไว้ตลอดทั้งเดือนครับ

Azure File Share คืออะไร

บริการแบบ PaaS ที่รองรับการ Share File บน Protocal Server Message Block (SMB) ที่ช่วยให้เราเข้าถึง File ได้ผ่านการ Mount Share Drive บน Windows, Linux, MacOS ครับผม

รองรับการ Encryption ทั้งแบบ At Rest (ข้อมูลที่ถูกจัดเก็บอยู่ใน Storage) และแบบ In Transit (รับส่งข้อมลู) ด้วยครับ

Azure File จาก medium.com/@patiwat

ในส่วนของราคานั้นเราสามารถดูรายละเอียดได้จากลิ้งข้างล่างนี้นะครับ

สร้าง Azure File Share

สร้าง Azure Resource Group

ในขั้นตอนแรกให้เราสร้าง Resource Group บน Azure Portal ก่อนนะครับ

สร้าง Azure File Share

Azure File Share จะอยู่ภายใต้ Storage accounts นะครับ เพราะงั้นเราจะทำ 3 ขั้นตอนคือ 1. สร้าง Storage accounts, 2. สร้าง File Share, 3. เก็บ File Secret Key เพื่อใช้ใน ACI

1.สร้าง Storage accounts

เลือกเมนู Storage accounts และทำการระบุรายละเอียดตามนี้นะครับ

  • Region: เลือก Southeast Asia เพราะใกล้ประเทศไทยที่สุด
  • Performance: เลือก Standard เพื่อประหยัดค่าใช้จ่าย เพราะเราไม่ได้ต้องการ Low Latency
  • Redundancy: เลือก Locally-redundant storage (LRS) เพื่อประหยัดค่าใช้จ่าย โดยถ้า Server Rack / Drive ใน Data Center นั้นพัง ระบบจะย้ายเราไปใช้ข้อมูลบน Rack อื่นที่ได้สำรองไว้อีก 2 Server Rack / Drive

ส่วนที่เหลือให้คงตาม Default เลยครับ โดยเราจะได้เรื่อง Soft Delete ที่ Azure จะสำรองข้อมูลของ File ที่เราลบลไปให้อีก 7 วัน เผื่อเราต้องนำกลับมาใช้ครับผม

หน้าตาเมื่อสร้าง Storage account แล้ว

2.สร้าง File Share

เลือกที่เมนู File shares -> + File share, ระบุชื่อ file share

ทำการเลือก Storage tiers โดยมีรายละเอียดดังนี้

  • Premium: ราคาแพงที่สุด, solid-state drives (SSDs), performance สูงและ latency ต่ำ เหมาะกับการเก็บข้อมูลสำหรับเป็น databases, web site hosting ใช้ได้ทั้ง Protocol Server Message Block (SMB),Network File System (NFS)
  • Transaction optimized: hard disk drives (HDDs), transaction heavy workloads เหมาะกับการเก็บข้อมูลสำหรับเป็น file server เพื่อใช้ร่วมกับระบบอื่นๆเช่น website
  • Hot: เหมาะสำหรับการใช้งานทั่วไป เช่นเป็น file server สำหรับใช้ภายในองค์กร
  • Cool: ราคาถูกที่สุด เหมาะสำหรับเก็บข้อมูลที่เกี่ยวกับการ Backup

หน้าตาเมื่อสร้าง File Share เสร็จแล้ว

3. เก็บ File Secret Key เพื่อใช้ใน ACI

ก่อนที่เราจะ Mount File Share ไปยัง ACI ได้นั้นเราต้องการข้อมูล 3 ส่วนนี้ก่อนนะครับ

  • Storage account name เราสร้างไว้แล้ว ชื่อ mysftppersists
  • File share name เราสร้า้งไว้แล้วชื่อ docker-volume
  • Storage account access key เราสามารถดูได้จาก Portal ตามขั้นตอนนี้นะครับ

สร้าง ACI และ Mount Volume มายัง Azure File Share

Azure Cloud Shell

ACI ไม่สามารถสร้างผ่าน UI บน Azure Portal ได้นะครับ เพราะงั้นเราจะทำการติดตั้งผ่าน Azure Cloud Shell ซึ่งทำให้เราสร้าง Resources บน Azure ได้ผ่าน CLI บน Web Browser เลยครับ โดยให้เราทำการจิ้มปุ่มข้างล่างนี้บน Azure Portal และเลือก Bash สำหรับ Shell ของเรา

ถ้าเรายังไม่เคยใช้งาน Azure Cloud Shell เราจะต้องสร้าง Azure File Share บน Storage Account ก่อนนะครับ ซึ่งมีค่าใช้จ่ายนิดหน่อยครับ

หรือถ้าท่านใดไม่อยากใช้งาน Azure Cloud Shell ก็ให้เราติดตั้ง Azure CLI บนเครื่อง Windows, Mac, Linux แทนได้เลยครับผม

สร้าง ACI ด้วย atmoz/sftp mage และ Mount File Share

เราจะทำการสร้าง Container บน ACI ผ่านคำสั่ง az container create นะครับ เรามาลองดูตัวอย่างข้างล่างกัน

az container create \
--resource-group blog-aci \
--name my-sftp \
--location southeastasia \
--image atmoz/sftp:latest \
--ports 22 \
--dns-name-label blog-ponggun-sftp-aci \
--environment-variables \
SFTP_USERS=sftpUser:sftpPassword:1001 \
--azure-file-volume-account-name mysftppersists \
--azure-file-volume-account-key \
hDjGLkbphtz/03h+6M0NDV21M21vHNfuPDEQGrja \
--azure-file-volume-share-name docker-volume \
--azure-file-volume-mount-path /home/sftpUser/upload

คำอธิบาย

  • ทำการสร้าง ACI ชื่อ my-sftp ภายใต้ Resource Group blog-aci บน Region Southeast Asia ด้วย Docker Image atmoz/sftp:latest และ map ไปยัง port 22 ซึ่งเป็น Port สำหรับ SFTP ใน Docker Image นั้น
  • ระบุ DNS ชื่อ ponggun-sftp เพื่อให้เข้าถึงได้จากภายนอก ในที่นี้เราจะใช้เพื่อเข้าถึง SFTP Server ผ่าน File Zilla
  • ระบุ environment variables เพื่อสร้าง User sftpUser ที่มี Password sftpPassword
  • ระบุ storage account name , storage account key , file share name เพื่อ Bind Azure File Share มายัง Docker Volume และเลือก Bind ไปยัง Docker Volume Path /home/sftpUser/upload
ภาพเปรียบเทียบระหว่าง Docker Command และ Azure Cloud Shell Command

เราสามารถดู List ของ Regions ทั้งหมดได้ด้วย Azure Cli นี้คำสั่งนะครับ

az account list-locations -o table

ลองเข้าไปดูที่ Azure Container instances กันครับ จะพบว่า ACI ของเราได้ถูกสร้างเรียบร้อยแล้ว

Overview

ในส่วนรายละเอียดเบื้องต้นนั้น เราจะพบว่า เราสามารถเข้าถึง ACI ได้ผ่าน FQDN เช่นในตัวอย่างนี้คือ blog-ponggun-sftp-aci.southeastasia.azurecontainer.io

ACI อยู่ภายใต้ group ชื่อ blog-aci, location Southeast Asia, OS type Linux

Containers -> Events

เราจะพบว่าเราได้ใช้ image ชื่อ atmoz/sftp:latest และมี Log บอกเราว่ามีการสร้าง, pull image เมื่อไหร่

Containers -> Properrties

ในส่วนนี้เราจะเห็นรายละเอียดของ Server ที่เราสร้างขึ้นมา ในตัวอย่างนี้มี CPU 1 cores, Memory 1.5 GiB, Port 22 , Environment Variable SFTP_USERS, Volume /home/sftpUser/upload ที่ Mount ไปยัง Azure File Share

Containers -> Logs

เราสามารถตรวจสอบ Docker Log ได้ว่ามีการทำงานยังไงบ้างในตอนที่สั่งสร้าง Container

Containers -> Connect

เราสามารถ Remote เข้าไปจัดการกับภายในของ Container ของเราได้ที่เมนูนี้นะครับ สามารถใช้ได้ทั้ง bash, sh

ทดลองเชื่อมต่อด้วย File Zilla

แก้ไข Connection ที่ทำไว้ก่อนหน้านี้เฉพาะ Host โดยนำ FQDN เช่นในตัวอย่างนี้คือ blog-ponggun-sftp-aci.southeastasia.azurecontainer.io มาวางแทน localhost

เมื่อลองเชื่อมต่อแล้วจะพบว่าสามารถเข้าไป upload files ได้ และพบว่า files ที่ upload แล้วก็ไปอยู่ใน Azure File Share เรียบร้อย

Azure Resource Manager templates (ARM templates) คืออะไร

ARM templates คือ JSON files ที่รวมคำสั่งในการสร้าง Infrastructure และ Configuration ในแต่ละ Project ของเรา เราสามารถใช้ Azure Portal ช่วยสร้าง ARM templates จาก Services ที่เราได้สร้างไว้แล้วอย่างสะดวกมากๆเลยครับ

ใครในสนเพิ่มเติม สามารถดูตัวอย่างการ Demo ได้ที่นี้นะครับ ในบทความนี้จะไม่ลงลึกการสร้าง ARM template แต่จะเป็นการนำ Template ที่มีอยู่แล้วมาใช้นะครับ ^^

ข้อดี

  • ช่วยให้เราจัดการ Infrastructure ได้ในรูปแบบของ Code
    (Infrastructure as code IaC)
  • เมื่ออยู่ในรูปแบบ Code ทำให้เราสามารถที่จะใช้ Git ในการทำ Source Code Control
  • Automatic deployment ด้วย Code ที่มี ทำให้มั่นใจว่าจะได้ ระบบใหม่ที่มี Infrastructure และ Code ที่เหมือนเดิมเสมอ

ตัวอย่าง ARM templates (เยอะมว้ากกก)

ลดเวลาการติดตั้ง SFTP บน ACI ด้วย ARM templates

ในบทความนี้เราจะใช้ ARM template ตามบทความข้างล่างนี้นะครับ

ให้เราทำการกดที่ปุ่ม Deploy to Azure เพื่อนำ Template ไปติดตั้งบน Azure Portal ของเราครับผม ซึ่งจะมีรายละเอียดดังภาพข้างล่างนี้นะครับ

โครงสร้างของ ARM templates

เราสามารถดูรายละเอียดของ Template ได้ด้วยการกด Edit Template ดังนี้นะครับ

เมื่อกดแล้วเราจะเห็นโครงสร้างของ Template ดังนี้นะครับ (ผมขอยกตัวอย่างเฉพาะที่สำคัญๆนะครับ)

  • parameters: เป็น Input ที่ให้เราสามารถเลือกกรอกได้ตอนที่จะสั่ง Apply Template ครับ ซึ่งมีหลาย Type ให้เลือก เช่นให้กรอกแบบ Free Text หรือ Dropdown
  • variables: เป็นการประกาศตัวแปรเพื่อใช้ภายใน Template ครับ ซึ่งเป้นได้ทั้งค่าคงที่, input จาก parameters หรือ ค่าจาก built-in function ของ template เอง
  • resources: เป็นการสั่งสร้าง Azure Resource ครับ เช่นในภาพข้างล่างนี้เราจะทำการสร้าง Storage Account ด้วย parameter และ variable ที่เรากำหนดไว้

การทำงานของ ARM template นี้

#1: รับ Input Parameters ดังนี้
Region

  • Region: เลือก Southeast Asia เหมือนตัวอย่างที่ผ่านมา

File Share

  • Storage Account Type: เลือกชนิดเพื่อสร้าง Storage Account ที่จะเอาไว้สร้าง File Share ต่ตออีกทีนึงครับ ให้เลือก Standard_LRS เหมือนที่เราทำไปก่อนหน้านี้
  • Storage Account Prerfix: เอาไว้ช่วยเติม Prefix ของ Storage Account ที่เรากำลังจะสร้าง
  • File Share Name: ชื่อ File Share ที่จะถูกสร้างภายใน Storage Account ที่เราระบุไว้ก่อนหน้านี้

Docker Container Environments

  • Sftp User: ระบุชื่อ User ที่เราจะใช้เพื่อ Login เข้า SFTP
  • Sftp Password: ระบุ Password
หน้าตา Input Parameter เมื่ออยู่บน Azure Portal

#2: สร้างตัวแปรเพื่อช่วยในการทำงานใน Template

ตัวอย่างเช่น ตัวแปร sftpContainerImage = atmoz/sftp:debian เพื่อระบุ Docker Image สำหรับการติดตั้ง SFTP Server

#3: สร้าง Storage Account ด้วยข้อมูลจาก Input Parameter และ Variable

#4: สร้าง File Share บน Storage Account จากข้อ #3

#5: สร้าง ACI ด้วย Docker Image atmoz/sftp:debian และ Mount Docker Volume มายัง File Share ในข้อ #4

Apply The Template

เมื่อเราเข้าใจการทำงานของ Template แล้วให้เรากดปุ่ม Discard เพื่อกลับมาที่หน้า Input Parameter, กรอกรายละเอียด, review และกด create นะครับ

เมื่อเราลองเข้าไปดู Resource Group ที่พึ่งสร้างขึ้น เราจะพบกับ Storage Account และ ACI ของเรานะครับ

เมื่อกดเข้าไปดู Storage account เราจะพบกับ Azure File Share ครับ

เมื่อกดเข้าไปดู ACI จะพบโครงสร้างคล้ายๆกับที่เราสร้างเองตามวิธีก่อนหน้านี้ครับ

บริการ File Sharing อื่นๆบน Azure

ด้วย Requirements ที่ทางลูกค้าของผมต้องการให้ใช้ SFTP เป็น File Server ทำให้ผมต้องใช้ ACI + Azure File Share เข้ามาช่วยในเรื่องนี้นะครับ

แต่ถ้าแนะนำได้ ผมอยากให้พิจารณาการใช้ Azure Blob Storage (คล้ายๆ Amazon S3) ซึ่งเป็นบริการจัดเก็บ Unstructured Data ตัวอย่างเช่น Text / PDF / Document / Image / Video File ในการจัดการ File Server มากกว่าครับ

เพราะว่าเป็นมาตราฐานที่ใช้เก็บ Files บน Azure ครับ มีทั้ง Tools ที่ช่วยให้เรา Upload/Download Files ได้สะดวกและทันสมัย รวมไปถึงยังมี SDK ที่ช่วยให้เราสามารถเขียนโปรแกรมเพื่อจัดการกับ Files บน Server ได้สะดวกมากๆครับ ประหยัดได้มากกว่าเพราะไม่ต้องเสียค่า Compute (CPU, Memory) ด้วยครับ จ่ายเฉพาะในส่วนของ Network และ Disk Space

Azure Blob Storage จาก blogit.create.pt

ความเทพคือทำ Video Streaming ได้ด้วยน่ะครับเพื่อตอบโจทย์การทำงานแบบ Video-On-Demand Solution

ตัวอย่างการนำ Azure Blob Storage ไปพัฒนาระบบ Video-On-Demand จาก docs.microsoft.com

สรุป

ในบทความนี้เราจะได้เรียนรู้ว่า ACI คืออะไร และช่วยให้การ Deploy Docker Image ที่เรามีได้อย่างรวดเร็วได้ยังไง

โดยเพิ่มขั้นตอนการใช้งานร่วมกับ Azure File Share, Azure Cloud Shell ยังไง โดยนำตัวอย่างการสร้าง SFTP ด้วย Docker Image และแนะนำ ARM templates เพื่อประหยัดเวลาในการ Deploy ระบบในครั้งถัดๆไปครับ

ผมแนะนำว่าเราควรใช ้ACI สำหรับระบบที่สามารถจะเปิดปิดการทำงานได้ในระยะเวลาที่กำหนดนะครับ เช่น การทำ Job Schedule เพื่อรันงานตามช่วงเวลา เหตุผลเพราะว่าจะสามารถประหยัดค่าใช้จ่ายได้มากครับ แต่ถ้าเลือกปิดทิ้งไว้ทั้งเดือนเลยผมมองว่า Azure App Service Plan จะตอบโจทย์มากกว่าครับ เพราะมีความยืดหยุ่นในเรื่องของราคาที่สูงกว่า ทำ Auto Scaling ง่ายด้วย

ส่วน SFTP นั้นเป็นทางเลือกสำหรับลูกค้าอีกทางนึงนะครับ แต่ถ้าเลือกได้ก็อยากให้ใช้ Azure Blob Storage จะดีกว่าเพราะมีค่าใช้จ่ายที่ถูกกว่า ไม่ต้องเสียค่า Compute (CPU, Memory) ด้วยครับ จ่ายเฉพาะในส่วนของ Network และ Disk Space และยังมี Tools ที่ช่วยจัดการ Files และ SDK ที่ช่วยให้เราเขียนโปรแกรมได้สะดวกมว้ากกก

ผมขอจบบทความนี้ไว้เพียงเท่านี้นะครับ หวังว่าจะเป็นประโยชน์กับผู้อ่านทุกท่านถ้าจำเป็นต้องสร้าง SFTP Server น้าาาา ^^

นายป้องกัน

--

--

Ponggun
T. T. Software Solution

Development Manager, Web Developer with ASP.Net, ASP.net Core, Azure and Microsoft Technologies