การสร้าง CData API Server ใน Amazon Linux 2

การติดตั้ง CData API Server ใน Amazon Linux 2 เราสามารถติดตั้งได้ทั้งแบบ Windows และ Linux ซึ่งในบทความนี้จะมาแนะนำวิธีการติดตั้ง CData API Server เวอร์ชัน Linux และติดตั้ง Driver Amazon Redshift เวอร์ชัน JDBC ลงใน Amazon Linux 2

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

บทความนี้แปลมาจากบทความที่เป็นภาษาญี่ปุ่นที่ชื่อว่า 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)

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 จากนั้นคลิก DownloadDownload TrialDownload 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 อ้างอิง