Integrate Amazon API Gateway to On-premise Resources

Pam Parichat
3 min readApr 17, 2021

Amazon API Gateway เป็นอีกหนึ่ง Service ที่เป็นที่โดดเด่นของ AWS ซึ่งจะช่วย Developders ในการจัดการกับ Application Programming Interface (API) จากชื่อก็บอกอยู่ว่าเป็น Gateway หรือเป็นเพียงประตูที่จะพาเราไปที่ไหนสักแห่ง โดย “สักแห่ง” ที่ว่านั้นก็คือ Function บางอย่างของ Application ของเรานั่นแหละ

ถ้า API Gateway เป็นประตู แล้วในห้องจะเป็นอะไรล่ะ?

เราสามารถนำ Amazon API Gateway ไปใช้งานร่วมกับ Service อื่นๆของ AWS ได้อย่างหลากหลาย ไม่ว่าจะเป็น AWS Lambda, Amazon DynamoDB, Amazon EC2, Amazon Kinesis และ อื่นๆ อีกมากมาย มากมาย..

สำหรับในบทความนี้เราจะไม่พูดถึงการนำ API Gateway ไปใช้งานร่วมกับ AWS Services ที่กล่าวไปข้างต้น แต่เราจะเอาไปใช้เป็นประตูที่เปิดไปสู่ Private application ที่วางอยู่บน On-premise !!

จากโจทย์ข้างต้นดูเหมือนจะ Advance แต่ความจริงแล้ว private application ก็คือ private application ไม่ว่าจะวางอยู่ที่ On-premise หรือวางอยู่บน AWS เราก็สามารถใช้วิธีการเดียวกันได้ เงื่อนไขมีอยู่อย่างเดียวคือ API Gateway ต้องสามารถเชื่อมต่อกับ private application ได้ > Network ต้องถึงกันนั่นเอง จะใช้ VPN หรือ Direct Connect ก็ได้

Figure 1: High Level Architecture Diagram

จากภาพด้านบนแสดง architecture diagram ของ solution ที่เราจะใช้ในบทความนี้ การจะทำให้ API Gateway สามารถเข้าถึง Private application เราจะใช้ 2 service มาช่วย นั่นคือ Network Load balancer (NLB) แหละ VPC Link

VPC Link เป็นเหมือนกับ network interface ของ API Gateway ที่ถูกสร้างบน VPC ของเราเพื่อใช้ในการเข้าถึง Private resources ของเรานั่นเอง

NLB คือ load balancer ที่ใช้ในการกระจาย incomming traffic ไปยัง target ต่างๆ โดยจะทำงานใน network layer หรือ layer 4 ของ OSI model ซึ่งในบทความนี้ target ของ NLB ก็คือ application ที่วางอยู่บน onpremise นั่นเอง

Traffic ระหว่าง NLB และ application service จะคุยกันผ่าน VPN Connection ที่เชื่อมต่อระหว่าง VPC และ On-premise network ซึ่งอย่างที่กล่าวไปข้างต้น เราสามารถใช้งาน Direct Connect แทน VPN ก็ได้ หรือจะเอา VPN ไป teminate ที่ Transit Gateway แทนที่จะมาเชื่อมที่ VPC ตรงๆก็ได้ ขอแค่ให้ routing ระหว่าง NLB และ Application Server ถึงกันเท่านั้น

วิธีการ Setup private integration มีขั้นตอนดังนี้

0. Prerequisites

ตรวจสอบให้แน่ใจก่อนว่า VPC ที่เราจะวาง NLB และ On-Premise Network สามารถคุยกันได้

1. สร้าง Network Load Balancer for private integration

สร้าง Private NLB และ Target group โดยเลือก target type เป็น IP Address และระบุ IP Address ของเครื่อง application server ของเราเป็น target

NLB ที่เราสร้างขึ้นจะต้องอยู่บน AWS Account และ Region เดียวกันกับ API Gateway ที่เราต้องการจะเชื่อมต่อนะ

2. สร้าง VPC Link

  • เข้าไปที่หน้า API Gateway Console API https://console.aws.amazon.com/apigateway.
  • เลือก VPC Links และเลือก Create
  • เลือก VPC link for REST APIs จากนั้นตั้งชื่อ VPC Link แล้วเลือก NLB ที่เราเพิ่งสร้างในข้อ 1. และกด Create
Figure 2: Capture screen createing a VPC link

3. สร้าง API Private Integration

  • เข้าไปที่หน้า API Gateway Console API https://console.aws.amazon.com/apigateway.
  • เลือก API ที่เราต้องการเพิ่ม Private Integration
  • สร้าง Resource และ Method ที่เราต้องการ
  • เลือก Integration type เป็น VPC Link
  • เลือก Method ที่ต้องการ
  • เลือก VPC Link ที่เราเพิ่งสร้างในข้อ 2.
  • ระบุ NLB Endpoint ในส่วนของ Endpoint URL
  • กำหนดค่า Timeout ที่ต้องการ แล้ว Save
Figure 3: Capture screen creating API private integration

4. Deploy API

เมื่อสร้าง API เสร็จเรียบร้อยแล้ว อย่าลืม deploy API ไปที่ stage ที่เราต้องการ

เป็นอันเรียบร้อยสำหรับการสร้าง API with Private integration เราสามารถทดสอบ API ของเราได้โดยใช้ tool ต่างๆ เช่น postman หรือจะทดสอบผ่าน API Gateway Console ก็ได้

Ref: https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-with-private-integration.html

--

--