การสร้าง CData API Server ใน Amazon Linux 2
บทความนี้แปลมาจากบทความที่เป็นภาษาญี่ปุ่นที่ชื่อว่า CData API ServerをAmazonLinux2の環境に構築する ซึ่งเจ้าของบทความนี้ก็คือ คุณ Kobayashi เป็นคนญี่ปุ่นครับ
เมื่อแปลจากภาษาญี่ปุ่นมาเป็นภาษาไทยแล้วผมได้เรียบเรียงเนื้อหาใหม่เพื่อให้เข้าใจง่ายขึ้น เนื่องจากบางครั้งอาจมีการอัปเดตข้อมูลใหม่ จึงมีความจำเป็นต้องอัปเดตให้เป็นข้อมูลปัจจุบัน
บทนำ
สวัสดีครับ ผม Kobayashi จากสำนักงานใหญ่ Data Analytics
CData API Server ที่เป็นเครื่องมือสร้าง REST API ในบทความด้านล่างนี้ เราสามารถดำเนินการติดตั้ง API Server และ Driver ในสภาพแวดล้อม (Environment) ของ Windows ได้ แต่ครั้งนี้จะมาติดตั้งใน Amazon Linux 2 บน EC2 และตั้งค่า API Server
สำหรับวิธีการติดตั้ง CData API Server และวิธีการตั้งค่า Data source ของ Version Windows ให้ดูที่บทความด้านล่างนี้
สิ่งที่ต้องมี
EC2 (Amazon Linux 2)
ดูวิธีการสร้าง Amazon Linux 2 บน EC2 และการอัปโหลดไฟล์ลง Amazon Linux 2 โดยเลือกวิธีที่ต้องการตามลิงก์บทความด้านล่างนี้
Amazon Linux 2 และ S3 (สามารถถ่ายโอนข้อมูลจาก S3 ไปยัง Amazon Linux 2 ได้)
Amazon Linux 2 และ Visual Studio Code (สามารถถ่ายโอนข้อมูลจาก Visual Studio Code ไปยัง Amazon Linux 2 ได้)
Amazon Linux 2 และ WinSCP (สามารถถ่ายโอนข้อมูลจาก WinSCP ไปยัง Amazon Linux 2 ได้)
Amazon Linux 2 และ Bitvise (สามารถถ่ายโอนข้อมูลจาก Bitvise ไปยัง Amazon Linux 2 ได้)
การติดตั้ง CData API Server ใน Amazon Linux 2
ขั้นตอนการติดตั้งมีดังนี้
- การดาวน์โหลด CData API Server (Java)
- การติดตั้ง CData API Server
- การตั้งค่าเริ่มต้น
- การเปลี่ยนรหัสผ่านของ Admin User
- การตั้งค่าการเชื่อมต่อ Database ภายนอก
- การติดตั้ง Amazon Redshift JDBC Driver
การดาวน์โหลด CData API Server (Java)
Download API Server: Cross-Platform (Java)
API Server มี .NET และ Java ให้เลือกดาวน์โหลด แต่ครั้งนี้เราจะมาดาวน์โหลด Cross-Platform (Java)
ให้คลิกปุ่ม Download
และป้อน Email และข้อมูลที่จำเป็นเพื่อดาวน์โหลด
เมื่อดาวน์โหลดเสร็จแล้ว จะได้ไฟล์ CDataAPIServer.zip
การติดตั้ง CData API Server
เตรียมไฟล์ CDataAPIServer.zip สำหรับติดตั้งใน Amazon Linux 2
# เปลี่ยนสิทธิ์การใช้งานจาก ec2-user เป็น root
$ sudo su -
# สร้างโฟลเดอร์ apiserver ให้เป็น Application directory สำหรับติดตั้ง CData API Server
$ mkdir /opt/apiserver
เมื่อเข้ามาที่ apiserver แล้วให้อัปโหลดไฟล์ CDataAPIServer.zip
ลงในโฟลเดอร์นี้ (/opt/apiserver
)
ต่อไปให้ติดตั้ง Java ก่อน เพราะ CData API Server Version Linux ทำงานด้วย Java
# ทำการ update yum
$ yum update -y
# ค้นหา package ของ java จาก yum repository
$ yum search java
# ติดตั้ง package ของ java-openjdk11
$ amazon-linux-extras install java-openjdk11
ต่อไปติดตั้ง CData API Server โดยเริ่มแตกไฟล์ออกมา
# เข้าไปที่ apiserver (Application directory)
$ cd /opt/apiserver
$ unzip CDataAPIServer.zip
ตรวจสอบไฟล์ด้วยคำสั่ง ll
จะเห็นว่าไฟล์ถูกแตกออกมาตามนี้
[root@ip-172-31-38-192 apiserver]# ll
total 126036
-rw-r--r-- 1 root root 8128419 Sep 29 16:23 apiserver.jar
-rw-r--r-- 1 root root 495 Sep 29 16:07 apiserver.logging.properties
-rw-r--r-- 1 root root 27 Sep 29 16:07 apiserverRealm.properties
-rw-r--r-- 1 root root 120898086 Nov 23 07:12 CDataAPIServer.zip
-rw-r--r-- 1 root root 8301 Sep 29 16:07 readme.md
-rw-r--r-- 1 root root 4814 Sep 29 16:27 service.sh
drwxr-xr-x 2 root root 48 Nov 24 06:00 webapp
[root@ip-172-31-38-192 apiserver]#
การตั้งค่าเริ่มต้น
เราจะลงทะเบียนกับ systemd เพราะต้องการจัดการ CData API Server ด้วยคำสั่ง systemctl
# เข้าไปที่ apiserver (Application directory) $ cd /opt/apiserver # เรียกใช้ script ที่จะลงทะเบียนกับ systemd $ sh service.sh # ตรวจสอบสถานะ $ systemctl status apiserver.service # เริ่มต้น Service CData API Server $ systemctl start apiserver.service # การตั้งค่าเริ่มต้นอัตโนมัติ $ systemctl enable apiserver.service
ตรวจสอบสถานะอีกครั้ง เมื่อสถานะแสดงเป็น Active: active (running) คือพร้อมใช้งานแล้ว ทีนี้ให้ดูบรรทัดแถวด้านล่าง จะเห็นคำว่า "Please visit http://localhost:8080 to login." ซึ่งเราจะใช้ URL นี้ในการ Login CData API Server บนเบราว์เซอร์ แต่ตอนนี้ยังไม่สามารถใช้งานได้ เราต้องเปิด Port 8080 ให้ CData API Server ก่อน วิธีการอยู่ในขั้นตอนถัดไป
[root@ip-172-31-38-192 apiserver]# systemctl status apiserver.service
● apiserver.service - API Server 2022
Loaded: loaded (/etc/systemd/system/apiserver.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2022-11-24 08:13:54 UTC; 18s ago
Main PID: 19961 (java)
CGroup: /system.slice/apiserver.service
└─19961 /usr/bin/java -jar /opt/apiserver/apiserver.jar
Nov 24 08:14:02 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: INFO: System Language: en, System Country: United States, System Charset: US-ASCII.
Nov 24 08:14:02 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: Nov 24, 2022 8:14:02 AM XcoreXcdata.apiserverX220X8307.rpc a
Nov 24 08:14:02 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: INFO: JVM Max Memory: 121 MB, JVM Total Memory: 61 MB, JVM Free Memory: 25 MB, Numbe...ors: 2.
Nov 24 08:14:02 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: Nov 24, 2022 8:14:02 AM XcoreXcdata.apiserverX220X8307.rpc a
Nov 24 08:14:02 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: INFO: Total space in Application Directory: 7 GB, Usable space in Application Direct...: 5 GB.
Nov 24 08:14:03 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: 2022-11-24 08:14:03.605:INFO :oejsh.ContextHandler:main: Started o.e.j.w.WebAppConte...er.war}
Nov 24 08:14:03 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: 2022-11-24 08:14:03.718:INFO :oejs.AbstractConnector:main: Started ServerConnector@5...0:8080}
Nov 24 08:14:03 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: 2022-11-24 08:14:03.723:INFO :oejs.Server:main: Started Server@7748410a{STARTING}[10...@8968ms
Nov 24 08:14:03 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: Nov 24, 2022 8:14:03 AM b.d a
Nov 24 08:14:03 ip-172-31-38-192.ap-southeast-1.compute.internal java[19961]: INFO: APIServer is now running. Please visit http://localhost:8080 to login.
Hint: Some lines were ellipsized, use -l to show in full.
[root@ip-172-31-38-192 apiserver]#
ให้เข้ามาที่ Security Groups ของ EC2 Instance ที่กำลังติดตั้ง CData API Server แล้วคลิก Edit inbound rules
ในหัวข้อ Inbound rules แล้วเพิ่ม Port 8080 ตามรูปภาพด้านล่างนี้ แล้วคลิก Save rules
ต่อไปเราจะเปิดหน้า Login CData API Server บนเว็บบราวเซอร์ ซึ่งข้อความในสถานะบอกว่าให้ Login ด้วย "http://localhost:8080" แต่เราจะเปลี่ยนแค่ localhost เป็น Public IP ของ EC2 Instance โดยคัดลอก Public IP ได้ที่หน้าคอนโซล EC2 Instance ของเรา แล้วมาเปิด URL บนเว็บบราวเซอร์ตามด้านล่างนี้
http://[Public IP]:8080
เมื่อแสดงหน้าจอแบบนี้แล้ว เราสามารถ Login ด้วย [User: admin
/ Password: admin
] ได้เลย แต่ผมจะเปลี่ยนรหัสผ่านก่อน ซึ่งจะอธิบายในขั้นตอนถัดไป
การเปลี่ยนรหัสผ่านของ Admin User
การตั้งค่าของ Admin User ที่ทำการตั้งค่า CData API Server จากเบราว์เซอร์จะอยู่ใน apiserverRealm.properties
ของ Application directory ดังนั้นอย่างน้อยให้เปลี่ยนรหัสผ่าน
$ vi /opt/apiserver/apiserverRealm.properties admin:admin,cdata_admin ↓ admin:{password},cdata_admin
เมื่อเปลี่ยนรหัสผ่านเสร็จแล้ว ให้รันคำสั่ง Restart CData API Server แล้ว Login ด้วยรหัสผ่านใหม่
$ systemctl restart apiserver.service
แล้วกลับไปที่หน้า Login CData API Server แล้ว Login ด้วยรหัสผ่านใหม่อีกครั้ง ถ้าแสดงหน้าจอแบบนี้ถือว่าเสร็จสมบูรณ์
การตั้งค่าการเชื่อมต่อ Database ภายนอก
Application Data, User Data, Log Data ได้รับการจัดการใน derby ของ Local แต่เราจะตั้งค่าการจัดการ Data เหล่านี้ใน MariaDB ของ Local เนื่องจากสะดวกกว่าการจัดการที่ Database ภายนอก
ก่อนอื่นให้ติดตั้ง MariaDB โดยดูที่บทความด้านล่างนี้ (ตอนสร้าง Database แนะนำให้ตั้งชื่อเป็น cdata
)
เมื่อเราติดตั้ง MariaDB เสร็จแล้ว ให้เริ่มตั้งค่าการเชื่อมต่อ Database ได้เลย
ไฟล์การตั้งค่าคือ webapp/apiserver.xml
ที่อยู่ภายใต้ Application directory ดังนั้นให้รันคำสั่งด้านล่างนี้ แล้วแก้ไขบรรทัดที่ 100
vi webapp/apiserver.xml
<!-- By default, APIServer will use a local derby database to store information on the transactions processed, as well as application and access logs. The APP_DB setting may be used to configure a database external to the applicaiton that will be used to store this information. <Call name="setInitParameter"> <Arg>APP_DB</Arg> <Arg>jdbc:mysql:Server=MySQLServer;Port=3306;Database=mysql;User=user;Password=password</Arg> </Call> -->
เนื่องจากการตั้งค่าการเชื่อมต่อไปยัง DB ภายนอกถูก comment out ไว้ ดังนั้นให้ทำการ uncomment out และแก้ไข Connection string
- APP_DB : ปลายทางการจัดเก็บ Application Data และ Log Data
- APP_USERS : ปลายทางการจัดเก็บ User Data
<!-- By default, APIServer will use a local derby database to store information on the transactions processed, as well as application and access logs. The APP_DB setting may be used to configure a database external to the applicaiton that will be used to store this information. --> <Call name="setInitParameter"> <Arg>APP_DB</Arg> <Arg>jdbc:mysql:Server=127.0.0.1;Port=3306;Database=cdata;User={username};Password={password}</Arg> </Call> <Call name="setInitParameter"> <Arg>APP_USERS</Arg> <Arg>jdbc:mysql:Server=127.0.0.1;Port=3306;Database=cdata;User={username};Password={password}</Arg> </Call>
ในการตั้งค่าครั้งนี้เป็นการตั้งค่าให้บันทึกลงใน MariaDB ของ Local แต่หากเราติดตั้ง Driver และเขียน Connection string ใหม่ด้วยข้อมูลการตั้งค่าที่เหมาะสม เราจะสามารถจัดการข้อมูลต่างๆ ใน Database อื่นได้
เมื่อตั้งค่าการเชื่อมต่อ Database ภายนอกเสร็จแล้วให้รันคำสั่ง Restart CData API Server
$ systemctl restart apiserver.service
จากนั้นให้เลือกแท็บ SETTINGS
แล้วเลือก Connections
และคลิก + Add Connection...
จะเห็นว่ายังไม่มี Data Source Amazon Redshift แสดงขึ้นมา
การติดตั้ง Amazon Redshift JDBC Driver
1. ดาวน์โหลด Amazon Redshift JDBC Driver
ในกรณีที่ต้องการจัดการ Data source อื่นที่ไม่ใช่ SQLite, Apache Derby, MySQL, Excel เราต้องติดตั้งไฟล์ Driver เราสามารถดาวน์โหลด Driver รุ่นทดลองได้จากเว็บไซต์ (CData Drivers) ของบริษัท CData ดังนั้นเราจะดาวน์โหลด Driver ในเว็บไซต์นี้
เข้าไปที่เว็บไซต์ดาวน์โหลด Drivers แล้วเลือก Redshift
เมื่อเข้ามาที่หน้าดาวน์โหลดของ Redshift แล้ว
ให้เลือก Driver เวอร์ชัน JDBC
เนื่องจาก CData API Server ทำงานด้วย Java จากนั้นคลิก Download
> Download Trial
> Download
Cross-Platform Unix/Linux Setup (.zip) แล้วป้อน Email และข้อมูลที่จำเป็นเพื่อดาวน์โหลด
2. เตรียมโฟลเดอร์สำหรับ Driver Amazon Redshift
# เข้าไปที่ apiserver (Application directory) $ cd /opt/apiserver # สร้างโฟลเดอร์สำหรับเก็บไฟล์ Driver Amazon Redshift $ mkdir redshift-driver
3. อัปโหลดไฟล์ Driver Amazon Redshift ไปยัง Amazon Linux 2
อัปโหลดไฟล์ AmazonRedshiftJDBCDriver.zip
ที่ดาวน์โหลดมาลงในโฟลเดอร์นี้ (/opt/apiserver
)
4. แตกไฟล์โดยรันคำสั่งนี้
# เข้าไปที่โฟลเดอร์ redshift-driver $ cd /opt/apiserver/redshift-driver $ unzip AmazonRedshiftJDBCDriver.zip
5. ย้าย cdata.jdbc.redshift ไปที่ Directory lib ของ Application directory
ไฟล์ cdata.jdbc.redshift.jar
, cdata.jdbc.redshift.remoting.ini
จะถูกแตกออกมาใน Target path ที่ระบุไว้ ดังนั้นให้ย้ายไปที่ Directory lib ของ Application directory ด้วยคำสั่งด้านล่างนี้
# ถอยกลับมาที่โฟลเดอร์ /opt/apiserver $ cd /opt/apiserver # แล้วย้ายไฟล์ที่แตกออกมาไปยังโฟลเดอร์ lib $ mv redshift-driver/lib/cdata.jdbc.redshift.* ./lib/
เมื่อติดตั้ง Driver แล้ว เราสามารถสร้าง API โดยเข้าถึง CData API Server ด้วยเบราว์เซอร์ได้
6. ตรวจสอบ Data source Amazon Redshift ใน CData API Server
รันคำสั่ง Restart CData API Server แล้ว Login CData API Server บนเบราว์เซอร์อีกครั้ง
$ systemctl restart apiserver.service
จากนั้นเลือกแท็บ SETTINGS
แล้วเลือก Connections
และคลิก + Add Connection...
จะเห็นว่า Data Source Amazon Redshift แสดงขึ้นมาแล้ว เพียงเท่านี้การตั้งค่า Driver ก็เสร็จสมบูรณ์
การตั้งค่า API Server
สำหรับการตั้งค่า API Server หลังจากนี้ ดูที่ลิงก์ด้านล่างนี้
ดูที่นี่เฉพาะหัวข้อนี้: การตั้งค่า CData API Server
สรุป
การแนะนำในครั้งนี้ ผมได้ติดตั้ง CData API Server (Java) และติดตั้ง Driver Amazon Redshift (JDBC) ใน Amazon Linux 2 บน EC2 ซึ่งก่อนติดตั้งเราต้องเลือกดาวน์โหลดไฟล์เวอร์ชันของ API Server และ Driver ให้ตรงกับ Environment ที่เราใช้งาน
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
แปลโดย: POP จากบริษัท Classmethod (Thailand) ครับ !
บทความต้นฉบับ
Link อ้างอิง
- CData API Server
- CData Drivers
- การใช้ CData API Server ใน EC2
- การเชื่อมต่อกับ Data Sources ต่างๆ (เช่น Redshift) และสร้าง API ใน CData API Server
- วิธีการใช้ S3 จาก EC2 และการใช้ AWS CLI S3
- ทำการติดตั้ง Extention Remote – SSH ใน VSCode และทดลองใช้งาน EC2 โดยตรงใน VSCode
- วิธีอัปโหลดไฟล์ด้วย WinSCP ไปยัง Server Website ที่ตั้งค่าใน EC2
- วิธีการใช้งาน Bitvise (การเชื่อมต่อ ssh terminal และการ upload ไฟล์)
- การติดตั้ง MySQL (MariaDB) และสร้าง Database ใน Amazon Linux 2