Tạo và Cung cấp API với Amazon API Gateway

Tạo và Cung cấp API với Amazon API Gateway

  1. Truy cập AWS API Gateway console.
  • Trong phần Choose an API type, tìm REST API - Develop a REST API where you gain complete control over the request and response along with API management capabilities.
  • Click Build Create And Expose the API with Amazon API Gateway
  1. Click OK Create And Expose the API with Amazon API Gateway
  2. Trong phần Create new API, chọn New API
  • Tại mục API name, điền iDevelop - Trip Search API
  • Tại mục Description, điền Allows searching ở trips from/to cities
  • Click Create API Create And Expose the API with Amazon API Gateway
  1. API sẽ được tạo và chỉ có đường dẫn root.
  • Click Actions
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Trong trang New Child Resource
  • Tại mục Resource Name, điền trips
  • Đánh dấu vào Enable API Gateway CORS
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Resource /trips sẽ được tạo. Chọn vào đường dẫn /trips
  • Click Actions
  • Click Create Method Create And Expose the API with Amazon API Gateway
  1. Trong danh sách liệt kê xuất hiện, chọn GET
  • Chọn dấu tick nâu bên cạnh để xác nhận lưu thiết lập. Create And Expose the API with Amazon API Gateway
  1. Tại mục Lambda Region, chọn Region của bạn
  • Tại mục Lambda Function, nhập idevelop và chọn idevelopTripSearchFull
  • Click Save Create And Expose the API with Amazon API Gateway
  1. Click OK Create And Expose the API with Amazon API Gateway
  2. Khi method được tạo, bạn sẽ thấy bảng Method Execution: Create And Expose the API with Amazon API Gateway
  3. Click Test Create And Expose the API with Amazon API Gateway
  4. Click Test Create And Expose the API with Amazon API Gateway
  5. Sau một vài phút để hàm Lambda khởi chạy và thực thi, bạn sẽ thấy kết quả tương tự như sau: Create And Expose the API with Amazon API Gateway
  6. Click /trips
  • Click Actions
  • Click Enable CORS Create And Expose the API with Amazon API Gateway
  1. Click Enable CORS and replace existing CORS headers Create And Expose the API with Amazon API Gateway
  2. Click Yes, replace existing values Create And Expose the API with Amazon API Gateway
  3. Khi các mục liệt kê có dấu tích xanh, bạn có thể tiếp tục các bước kế. Sẽ mất một ít thời gian để hoàn thành. Create And Expose the API with Amazon API Gateway

Cung cấp /tripsfromcity RESTful API endpoint

Đường dẫn đầu tiên mà chúng ta cung cấp khá đơn giản - /trips sẽ lấy tất cả các chuyến đi trong hệ thống.

Nhưng chúng ta biết việc triển khai mã nguồn của chúng ta cho phép chúng ta chỉ định một bộ lọc để truy vấn ở các chuyến đi xuất phát từ một thành phố cụ thể hoặc có điểm đến cụ thể. Vì vậy chúng ta muốn hiển thị chức năng này cho người dùng API của mình. Đầu tiên, chúng ta sẽ hiển thị đường dẫn /tripfromcity.

  1. Trong phần Resources, click /
  • Click Actions
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Tại mục Resource Name, điền tripsfromcity
  • Chọn Enable API Gateway CORS
  • CLick Create Resource Create And Expose the API with Amazon API Gateway
  1. Lệnh gọi của chúng ta vào hàm Lambda yêu cầu thông số city. Chúng ta sẽ đi theo tiêu chuẩn ở RESTful interface và chuyển tham số này vào dưới dạng tham số truyền trên URL. Chọn /tripsfromcity
  • Click Actions
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Tại mục Resource Name, điền {city}
  • Tại mục Resource Path, xóa nội dung mặc định và điền {city}
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Click /{city}
  • Click Actions
  • Click Create Method Create And Expose the API with Amazon API Gateway
  1. Trong danh sách liệt kê, chọn GET
  • Click tick xám bên cạnh để xác nhận lưu thiết lập. Create And Expose the API with Amazon API Gateway
  1. Tại mục Lambda Region. chọn Region của bạn
  • Tại mục Lambda Function, nhập idevelop và chọn idevelopTripSearchFromCity
  • Click Save Create And Expose the API with Amazon API Gateway
  1. Click OK Create And Expose the API with Amazon API Gateway
  2. Khi method được tạo, bạn sẽ thấy bảng Method Execution. Chúng ta không thể tiếp tục thực hiện kiểm thử gọi đến API bởi vì chúng ta cần biến đổi yêu cầu thông qua API Gateway nhằm lấy được thông tin {city} được truyền qua hàm Lambda chính xác.

devlounge.lambda.FindTripsFromCityHandler handler cần thấy được thông số truyền vào từ yêu cầu như sau:

{
	"payload" : 
	{
        "city": "Melbourne"
    }
}

Điều này sẽ khiến hàm Lambda tìm kiếm DynamoDB ở tất cả các chuyến đi xuất phát từ Melbourne. Chúng ta cần thêm một Body Mapping Template cho method này ở API Gateway nhằm chuyển đổi thông số cho đúng theo yêu cầu.

  • Click Integration Request Create And Expose the API with Amazon API Gateway
  1. Click Mapping Templates
  • Click When there are no templates defined (recommended)
  • Click Add mapping template
  • Trong mục Content-Type, nhập application/json
  • Click dấu tick xám để lưu lựa chọn. Create And Expose the API with Amazon API Gateway
  1. Bên dưới mục Generate template, nhập
{
    "payload" : {
        "city": "$input.params('city')"
    }
}

Template này sẽ lấy tham số {city} từ URL và thêm nó vào JSON payload và gửi đến hàm Lambda giống như hàm Lambda mong đợi.

  • Click Save Create And Expose the API with Amazon API Gateway

Schema được định nghĩa ở đây cho hàm Lambda này là hoàn toàn có thể tùy chỉnh và trong ứng dụng của bạn, bạn có thể sử dụng một mô hình hoàn toàn khác. Mẫu ánh xạ cung cấp cho bạn sự linh hoạt để chuyển đổi dữ liệu đến một cách nhanh chóng thông qua API Gateway endpoint.

  1. Click Method Execution Create And Expose the API with Amazon API Gateway
  2. Click Test Create And Expose the API with Amazon API Gateway
  3. Trong mục Path, tại trường {city}, nhập Melbourne
  • Click Test Create And Expose the API with Amazon API Gateway
  1. API Gateway sẽ thực hiện lệnh gọi vào hàm Lambda, truyền giá trị Melbourne vào Body Mapping Template mà bạn đã xác định, chèn tham số tìm kiếm Melbourne vào JSON payload được gửi đến hàm Lambda. Điều này sẽ khiến handler sử dụng JSON và thực hiện tìm kiếm trong bảng DynamoDB và trả về kết quả. Bạn sẽ thấy một kết quả tương tự như sau: Create And Expose the API with Amazon API Gateway
  2. Chọn /{city} trong phần /tripsfromcity
  • Click Actions
  • Click Enable CORS Create And Expose the API with Amazon API Gateway
  1. Click Enable CORS and replace existing CORS headers Create And Expose the API with Amazon API Gateway
  2. Click Yes, replace existing values Create And Expose the API with Amazon API Gateway
  3. Khi các mục liệt kê có dấu tick xanh, bạn có thể tiếp tục các bước kế. Sẽ mất một ít thời gian để hoàn thành. Create And Expose the API with Amazon API Gateway
  4. Click / trong phần Resources
  • Click Actions
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Tại mục Resource Name, nhập tripstocity
  • Chọn Enable API Gateway CORS
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Lệnh gọi của chúng ta vào hàm Lambda yêu cầu thông số city. Chúng ta sẽ đi theo tiêu chuẩn ở RESTful interface và chuyển tham số này vào dưới dạng tham số truyền trên URL. Click /tripstocity
  • Click Actions
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. Tại mục Resource Name, nhập {city}
  • Tại mục Resource Path, xóa nội dung mặc định và nhập {city}
  • Chọn Enable API Gateway CORS
  • Click Create Resource Create And Expose the API with Amazon API Gateway
  1. CLick /{city} trong phần /tripstocity
  • Click Actions
  • Click Create Method Create And Expose the API with Amazon API Gateway
  1. Trong danh sách liệt kê, chọn GET
  • Click dấu tick xám bên cạnh để xác nhận lưu thiết lập. Create And Expose the API with Amazon API Gateway
  1. Trong mục Lambda Region, chọn Region của bạn
  • Tại mục Lambda Function, nhập idevelop và chọn idevelopTripSearchToCity
  • Click Save Create And Expose the API with Amazon API Gateway
  1. Click OK Create And Expose the API with Amazon API Gateway
  2. Khi method được tạo, bạn sẽ thấy bảng Method Execution. Chúng ta không thể tiếp tục thực hiện kiểm thử gọi đến API bởi vì chúng ta cần biến đổi yêu cầu thông qua API Gateway nhằm lấy được thông tin {city} được truyền qua hàm Lambda chính xác.

devlounge.lambda.FindTripsToCityHandler handler cần thấy được thông số truyền vào từ yêu cầu như sau:

{
	"payload" : 
	{
        "city": "Melbourne"
    }
}

Điều này sẽ khiến hàm Lambda tìm kiếm DynamoDB ở tất cả các chuyến đi đến Melbourne. Chúng ta cần thêm một Body Mapping Template cho method này ở API Gateway nhằm chuyển đổi thông số cho đúng theo yêu cầu.

  • Click Integration Request Create And Expose the API with Amazon API Gateway
  1. Click Mapping Templates
  • Chọn When there are no templates defined (recommended)
  • Click Add mapping template
  • Tại mục Content-Type, nhập application/json
  • Click dấu tick xám để lưu lựa chọn. Create And Expose the API with Amazon API Gateway
  1. Bên dưới mục Generate template, nhập
{
    "payload" : {
        "city": "$input.params('city')"
    }
}
  • Click Save Create And Expose the API with Amazon API Gateway
  1. Click Method Execution Create And Expose the API with Amazon API Gateway
  2. Click Test Create And Expose the API with Amazon API Gateway
  3. Trong mục Path, tại trường {city}, nhập Melbourne
  • Click Test Create And Expose the API with Amazon API Gateway
  1. API Gateway sẽ thực hiện lệnh gọi vào hàm Lambda, truyền giá trị Melbourne vào Body Mapping Template mà bạn đã xác định, chèn tham số tìm kiếm Melbourne vào JSON payload được gửi đến hàm Lambda. Điều này sẽ khiến handler sử dụng JSON và thực hiện tìm kiếm trong bảng DynamoDB và trả về kết quả. Bạn sẽ thấy một kết quả tương tự như sau: Create And Expose the API with Amazon API Gateway
  2. Click /{city} trong phần /tripstocity
  • Click Actions
  • Click Enable CORS Create And Expose the API with Amazon API Gateway
  1. CLick Enable CORS and replace existing CORS headers Create And Expose the API with Amazon API Gateway
  2. Click Yes, replace existing values Create And Expose the API with Amazon API Gateway
  3. Khi các mục liệt kê có dấu tick xanh, bạn có thể tiếp tục các bước kế. Sẽ mất một ít thời gian để hoàn thành. Create And Expose the API with Amazon API Gateway
  4. Nếu đã hoàn thành đến đây, bạn sẽ có một cây Resource nhìn tương tự như thế này: Create And Expose the API with Amazon API Gateway

Triển khai API và Kiểm thử

  1. Trong phần Resources, click /
  • Click Actions
  • CLick Deploy API Create And Expose the API with Amazon API Gateway
  1. Tại mục Deployment stage, chọn [New Stage]
  • Tại mục Stage name, nhập prod
  • Tại mục Stage description, nhập Trips API
  • Tại mục Deployment description, nhập Initial deployment
  • Click Deploy Create And Expose the API with Amazon API Gateway
  1. Stage mới tên prod sẽ được tạo và bạn sẽ thấy prod Stage Editor
  • Click Invoke URL Create And Expose the API with Amazon API Gateway
  1. Một cửa sổ mới sẽ mở ra và truy cập đến địa chỉ đó. Bạn sẽ thấy một thông báo lỗi nêu rõ {“message”:“Missing Authentication Token”}. Điều này là do không có trình xử lý ở đường dẫn gốc của stage - bạn chỉ có các resources/methods được xác định bên dưới các đường dẫn /trips, /tripsfromcity/tripstocity. Create And Expose the API with Amazon API Gateway
  2. Chỉnh sửa URL trong thanh URL của trình duyệt và thêm /trips rồi nhấn Enter. Trang sẽ làm mới và sau đó hiển thị tất cả các chuyến đi có sẵn dưới dạng JSON. Đầu ra sẽ tương tự như sau: Create And Expose the API with Amazon API Gateway
  3. Kiểm tra method /tripsfromcity, sử dụng /tripsfromcity/Melbourne để tìm kiếm tất cả các chuyến đi khởi hành từ Melbourne. Create And Expose the API with Amazon API Gateway
  4. Kiểm tra method /tripstocity, sử dụng /tripstocity/Melbourne để tìm kiếm tất cả các chuyến đi đến Melbourne. Create And Expose the API with Amazon API Gateway

Nếu dữ liệu có vẻ đúng và không có lỗi, bạn đã sẵn sàng chuyển sang phần tiếp theo.

Sử dụng CloudFormation/SAM thông qua AWS CLI để triển khai microservice HotelSearch

Trong các bước trước đó, bạn đã triển khai và cấu hình microservice TripSearch theo cách thủ công, bao gồm các hàm Lambda và API Gateway resource. Bạn sẽ nhận thấy rằng có khá nhiều bước cần làm và thực hiện việc này theo cách thủ công rất tốn thời gian và dễ xảy ra lỗi. Trong bước này, bạn sẽ sử dụng AWS CLI và CloudFormation/SAM để triển khai microservice HotelSearch, thay vì triển khai thủ công các tài nguyên.

Bằng cách sử dụng CloudFormation/SAM, nhiều bước thủ công sẽ được thực hiện cho bạn, sắp xếp quy trình triển khai. Bạn vẫn sẽ phải kích hoạt quy trình theo cách thủ công, nhưng việc triển khai thực tế sẽ được tự động hóa.

HotelSpecials microservice cần truy cập vào cơ sở dữ liệu MySQL để truy xuất dữ liệu về các dữ liệu đặc biệt của khách sạn. Môi trường bài thực hành đã tự động triển khai và tạo cơ sở dữ liệu cho bạn và chi tiết kết nối được cung cấp trong CloudFormation Outputs với hướng dẫn bên dưới về nơi cập nhật các thông số trong template mà bạn sẽ sử dụng để triển khai microservice. Cơ sở dữ liệu MySQL đã được triển khai bằng Amazon RDS và không thể truy cập công khai vì nó được khởi chạy trong một mạng con riêng tư. Do đó, để hàm Lambda để có thể kết nối với cơ sở dữ liệu, hàm Lambda cũng sẽ cần được triển khai thành một mạng con riêng bằng cách kích hoạt VPC Integration. Tập tin template.yml được cung cấp có tất cả các thiết lập cần thiết để thực hiện việc này, bạn chỉ cần cập nhật các thông số theo hướng dẫn bên dưới.

  1. Tải file HotelSpecials.zip và giải nén
  2. Mở Command Prompt và chuyển đường dẫn đến project HotelSpecials đã giải nén ở bước 65
  • Chạy câu lệnh dưới đây:
set AWS_PROFILE=devaxacademy
mvn package shade:shade

Create And Expose the API with Amazon API Gateway 67. Sau khi tập tin JAR đã được build sẽ nằm trong thư mục target của project và có tên là hotelspecials-1.0.0.jar Create And Expose the API with Amazon API Gateway 68. Truy cập AWS CloudFormation Console.

  • Click Stack.
  • Nhập DevAx-06 vào ô tìm kiếm và nhấn Enter.
  • Click DevAx-06. Create And Expose the API with Amazon API Gateway
  1. Click tab Output
  • Lưu lại giá trị DatabaseSecurityGroup, DatabaseSubnet1, DatabaseSubnet2, RDSEndpointS3BucketLambdaCodeBucketName để sử dụng trong bước tiếp theo. Create And Expose the API with Amazon API Gateway
  1. Trong Eclipse IDE, mở file template.yml Create And Expose the API with Amazon API Gateway
  2. Thay <DatabaseSecurityGroup> bằng giá trị DatabaseSecurityGroup đã lưu trong bước 69
  • Thay <DatabaseSubnet1> bằng giá trị DatabaseSubnet1 đã lưu trong bước 69
  • Thay <DatabaseSubnet2> bằng giá trị DatabaseSubnet2 đã lưu trong bước 69
  • Thay <RDSEndpoint> bằng giá trị RDSEndpoint đã lưu trong bước 69
  • Lưu lại Create And Expose the API with Amazon API Gateway
  1. Trong Command Prompt, chạy câu lệnh dưới đây để để đóng gói hàm Lambda (từ thành phần triển khai bạn đã tạo)
aws cloudformation package --template template.yml --s3-bucket <S3BucketLambdaCodeBucketName> --output-template template-export.yml

Thay <S3BucketLambdaCodeBucketName> bằng giá trị S3BucketLambdaCodeBucketName đã lưu trong bước 69

Create And Expose the API with Amazon API Gateway

Lệnh sẽ tải lên các artifact vào S3 bucket, sau đó cập nhật con trỏ template.yml thành artifact trên S3 và ghi ra một mẫu mới có kèm theo bản cập nhật này vào một tệp có tên template-export.yml.
Sẽ mất một hoặc hai phút để hoàn tất quá trình tải lên artifact.

73. Chạy lệnh dưới đây để tạo và triển khai CloudFormation Change Set

aws cloudformation deploy --template-file template-export.yml --stack-name HotelSpecialsAPI --capabilities CAPABILITY_IAM

Create And Expose the API with Amazon API Gateway 74. Truy cập AWS CloudFormation Console.

  • Click Stack.
  • Bạn sẽ thấy stack có tên HotelSpecialsAPI. Điều này cho thấy rằng CloudFormation Change Set đã được tạo. Lệnh bạn đã đưa ra sẽ tạo Change Set và sau đó tự động thực hiện Change Set. Sẽ mất một vài phút để hoàn tất quá trình thực thi. Create And Expose the API with Amazon API Gateway
  1. Chọn HotelSpecialsAPI stack, click tab Events và xem lại các bước mà CloudFormation template đã áp dụng cho môi trường của bạn. Chúng sẽ khớp với các tài nguyên và hành động trong tập tin template-output.yml.
  2. Truy cập AWS API Gateway console
  • Click iDevelop - Hotel Specials API Create And Expose the API with Amazon API Gateway
  1. Click Get
  • Click Integration Request Create And Expose the API with Amazon API Gateway
  1. Bảng Integration Request sẽ xuất hiện. Lambda Function xác định: Create And Expose the API with Amazon API Gateway

Giá trị được chỉ định không phải là một hàm Lambda, mà thay vào đó, là một Stage Variable sẽ được thay thế trong thời gian chạy bằng API Gateway. Do đó, để lệnh gọi API này thành công, Stage trong API Gateway phải xác định một giá trị cho Stage Variable envHotelSpecials

  1. Click Stages
  • Click prod
  • Click tab Stage Variables Create And Expose the API with Amazon API Gateway

    Một biến duy nhất được xác định - envHotelSpecials - giống với tên biến giai đoạn mà phương thức GET đã mong đợi. Giá trị của biến là GetHotelSpecials là tên của hàm Lambda mà mẫu được tạo bằng cách sử dụng tập tin JAR mà bạn đã tạo và tải lên trong quá trình đóng gói/triển khai.

Kiểm thử HotelSpecials API

  1. Mở rộng prod trong Stages để xem cấu trúc.
  • Click Get
  • Click Invoke URL Create And Expose the API with Amazon API Gateway
  1. Sau một khoảng thời gian, hàm Lambda khởi tạo, bạn sẽ thấy kết quả JSON truy xuất dữ liệu từ cơ sở dữ liệu MySQL về từ hàm Lambda Create And Expose the API with Amazon API Gateway

Nếu bạn thấy một kết quả JSON không có lỗi, bạn đã triển khai thành công một API và hỗ trợ hàm Lambda truy vấn cơ sở dữ liệu mySQL.

Chú ý rằng chúng nhanh hơn và dễ hơn việc triển khai thủ công như thế nào?

Đó là sức mạnh của tự động hóa. Trong bài tập tiếp theo, chúng ta sẽ thực hiện bước này xa hơn, sử dụng phương pháp tiếp cận CI/CD pipeline (hiện đã phổ biến) để triển khai API tiếp theo của chúng ta.