- Chỉnh sửa tập tin
FlightSpecials/template_cloud9.yml
và thay thế chúng bằng các giá trị được tìm thấy trong Cloudformation Outputs:
Mục để thay thế |
Mô tả |
|
Mạng con đầu tiên cho cơ sở dữ liệu MySQL |
|
Mạng con thứ hai cho cơ sở dữ liệu MySQL |
|
Security group cho cơ sở dữ liệu MySQL |
|
MySQL database endpoint |
Khi bạn đã cập nhật xong các giá trị, mục VPCConfig sẽ trông tương tự như sau (với các giá trị khác nhau):
VpcConfig:
SecurityGroupIds:
- sg-858e61e3
SubnetIds:
- subnet-3c989d4a
- subnet-a04255c4
Environment:
Variables:
JDBC_CONNECTION_STRING: jdbc:mysql://qlxx5jzrxxxby.cig0rzmdedgf.ap-northeast-1.rds.amazonaws.com:3306/travelbuddy?useSSL=false&serverTimezone=UTC&autoReconnect=true
JDBC_UID: root
JDBC_PWD: labpassword
Cập nhật AWS region trong tập tin định nghĩa API swagger.yml
Tập tin swagger.yml
được cung cấp trong gói zip là định nghĩa cho API sẽ cung cấp microservice thông qua Amazon API Gateway. Nó cần được cập nhật thông tin chi tiết về AWS Account ID trong bài thực hành của bạn và Region AWS mục tiêu trước khi bạn có thể triển khai dịch vụ vi mô của mình.
- Trong Cloud9 IDE, tìm tập tin
swagger.yml
và mở ra trong trình soạn thảo văn bản.
- Tìm kiếm
REPLACE_AWS_REGION
và thay thế nó bằng khu vực bạn đang sử dụng(VD: ap-northeast-1
)
- Tìm kiếm
REPLACE_AWS_ACCOUNTID
và thay thế nó bằng AWS Account Id. Bạn có thể tìm thấy AWS Account ID của mình trong trang tổng quan của bài thực hành.
- Lưu tập tin.
- Khi gói tập tin zip được sử dụng trong codedeploy, bạn cần phải gói từ thư mục nguồn. Để làm điều này, hãy chạy như sau:
cd ~/environment/FlightSpecials
zip -r ../FlightSpecials.zip *
- Nén tập tin
FlightSpecials.zip
với các cập nhật.
cd ~/environment
rm FlightSpecials.zip
cd FlightSpecials
zip -r FlightSpecials.zip *
adding: buildspec.yml (deflated 53%)
adding: copy_files.sh (deflated 63%)
adding: pom.xml (deflated 75%)
adding: src/ (stored 0%)
adding: src/test/ (stored 0%)
adding: src/test/java/ (stored 0%)
adding: src/test/java/devlounge/ (stored 0%)
adding: src/test/java/devlounge/lambda/ (stored 0%)
adding: src/test/java/devlounge/lambda/test/ (stored 0%)
adding: src/test/java/devlounge/lambda/test/TestContext.java (deflated 76%)
adding: src/test/java/devlounge/lambda/test/TestUtils.java (deflated 79%)
adding: src/test/java/devlounge/lambda/test/LambdaFunctionHandlerTest.java (deflated 57%)
adding: src/main/ (stored 0%)
adding: src/main/java/ (stored 0%)
adding: src/main/java/devlounge/ (stored 0%)
adding: src/main/java/devlounge/model/ (stored 0%)
adding: src/main/java/devlounge/model/FlightSpecial.java (deflated 73%)
adding: src/main/java/devlounge/model/LambdaResult.java (deflated 62%)
adding: src/main/java/devlounge/lambda/ (stored 0%)
adding: src/main/java/devlounge/lambda/FlightSpecialsHandler.java (deflated 65%)
adding: swagger.yml (deflated 68%)
adding: template-configuration.json (deflated 18%)
adding: template.yml (deflated 65%)
Lưu ý rằng thư mục FlightSpecials hiện đã bị bỏ qua, điều này rất quan trọng để bắt buộc chỉ có mã nguồn ở đó.
Tạo CodeStar Project
- Sao chép mã vào FlightSpecials. Bucket thực hành của bạn sẽ trông giống như thế này
mod-9c10d0af24f74a4a-s3bucketlambdacode-vsuckr33vysr
aws s3 cp FlightSpecials.zip s3://<Lambdabucket>
- Sao chép tập tin
toolchain.yml
vào Lamdba bucket
aws s3 cp toolchain.yml s3://<Lambdabucket>
- Tạo codepipeline template cho flightspecials, sẽ giống như sau:
Thay đổi XXX bằng tài khoản của bạn bên dưới để template hoạt động.
{
"name": "flightspecials",
"id": "flightspecials",
"description": "flight specials java8 example using ci/cd",
"sourceCode": [
{
"source": {
"s3": {
"bucketName": "<Lambdabucket>",
"bucketKey": "FlightSpecials.zip"
}
},
"destination": {
"codeCommit": {
"name": "flightspecials"
}
}
}
],
"toolchain": {
"source": {
"s3": {
"bucketName": "<Lambdabucket>",
"bucketKey": "toolchain.yml"
}
},
"roleArn": "arn:aws:iam::XXX:role/service-role/aws-codestar-service-role",
"stackParameters": {
"ProjectId": "flightspecials"
}
}
}
- Tạo project AWS Codestar:
aws codestar create-project --cli-input-json file://template.json
{
"arn": "arn:aws:codestar:ap-northeast-1:436753246579:project/flightspecials"
}
Bây giờ hãy kiểm tra thông tin CloudFormation đã hoàn thành, repo CodeCommit đã tạo và bản build đầu tiên đã được khởi động.
Nếu bất kỳ lỗi nào trong số này không thành công, hãy xem các lỗi. Bạn sẽ cần xóa s3 bucket đã tạo và tạo lại nếu có bất kỳ sự cố nào. Nếu bạn đang thay đổi bất kỳ mã nào cho FlightSpecials.zip
và hãy nhớ tải lên bucket.
Để kiểm tra hoạt động : aws codestar describe-project --id flightspecials
Thiết lập CodeCommit trên AWS Cloud9
Sau khi tạo xong, bạn cần thiết lập git repo cần thiết cho codecommit mà bạn đã định cấu hình trước đó.
- Di chuyển tập tin zip ban đầu, vì đây chỉ là tệp tải lên lần đầu tiên, sau đó thiết lập helper class cần thiết và tải về repository của bạn.
mv FlightSpecials FlightSpecials_orig
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/flightspecials
cd flightspecials
Cấp quyền cho CloudFormation để tạo IAM role
Là một phần của việc thiết lập microservice của chúng ta, chúng ta sẽ chỉ định IAM Role mới cho hàm Lambda của chúng ta để cho phép nó thực hiện các tác vụ khác nhau. Khi CodeStar tạo project, nó đã tạo một IAM Role cấp cho CloudFormation vừa đủ quyền để triển khai dịch vụ Hello World example. Các quyền này không đủ cho các yêu cầu nâng cao hơn của chúng ta. Vì vậy, chúng ta cần điều chỉnh các chính sách được chỉ định cho CloudFormation role, để mở rộng các quyền đó.
- Truy cập AWS IAM Console trên trình duyệt.
- Chọn Roles ở thanh điều hướng bên trái.
- Trong ô Filter nhập
CodeStarWorker-flightspecialsa-CloudFormation
để tìm đúng IAM Role.
Nếu bạn không thể tìm thấy role, có thể do còn quá sớm - CodeStar vẫn đang trong quy trình cấp phát và có thể chưa tạo role. Kiểm tra tiến trình cung cấp trong CodeStar dashboard.
- Chọn vào role để mở bảng thông tin chi tiết.
- Chọn Attach Policy, trong ô Filter nhập
idevelop
để chọn các chính sách có sẵn. Chọn chính sách idevelopCodeStarCloudFormationPolicy
trong danh sách. Chính sách này đã được tạo cho bạn bởi quá trình thiết lập bài thực hành và có các quyền được chỉ định cho nó để cho phép CloudFormation làm việc thay mặt chúng ta khi tạo role thực thi Lambda.
- Chọn chính sách được liệt kê và nhấp vào Attach Policy
Kiểm tra các thay đổi đưa vào quản lý mã nguồn để kích hoạt quá trình triển khai
- Bây giờ bạn đã hoàn tất cập nhật tập tin, bạn cần thêm các tập tin đã thay đổi vào
new-implementation
git branch và xác nhận các thay đổi. Bạn có thể dùng Cloud9 IDE:
- Thực thi git status
để kiểm tra lại các thay đổi về code.
- Thực thi git add .
để thêm vào các tập tin đã thay đổi.
- Thực thi git commit -m "Baseline implementation"
xác nhận các thay đổi và cung cấp một thông báo
- Thực thi git checkout master
để chuyển trở lại master branch
- Bây giờ hợp nhất các thay đổi cho triển khai mới của bạn vào nhánh chính bằng cách phát hành git merge new-implementation
- Đẩy các thay đổi lên CodeCommit.
Sẽ mất một vài phút để đẩy mã và bắt đầu triển khai. Kiểm tra mã nguồn và các template sẽ kích hoạt quá trình xây dựng và triển khai thực hiện mới. AWS CodePipeline hiện sẽ sử dụng CloudFormation để triển khai các tài nguyên sau:
Trong khi bạn có chút thời gian, hãy dành vài phút để khám phá buildspec.yml
, swagger.yml
và template.yml
các tệp xác định Amazon API Gateway, hàm AWS Lambda và quá trình build/deploy thông qua AWS CodeBuild. Bạn sẽ nhận thấy rằng tập tin builspec.yml
sử dụng cùng một lệnh AWS CLI để đóng gói triển khai mà bạn đã sử dụng khi đóng gói HotelSpecials API theo cách thủ công trước đó
Đừng thực thi lệnh bên dưới, chúng chỉ để bạn tham khảo thêm.
mvn package shade:shade
aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml
Tập tin template.yml
sử dụng Serverless Application Model (SAM) chuyển đổi để xác định API REST, trái ngược với cách chúng ta tiếp cận điều này trong HotelSpecials API
Ví dụ: Trong HotelSpecials, CloudFormation template đã sử dụng CloudFormation chuẩn để xác định API REST để nó có thể rõ ràng về định nghĩa API và bao gồm swagger
. Ví dụ FlightSpecials sử dụng cách tiếp cận khai báo nhiều hơn và để lại thông tin chi tiết cho SAM. Bạn có thể tự do kết hợp CloudFormation và SAM trong cùng một template, như bạn có thể thấy từ các ví dụ này.
Lưu ý rằng biến môi trường $S3_BUCKET
được CodeBuild tự động thay thế khi bước xây dựng được thực hiện và được thay thế bằng S3 bucket mà CodeStar đã cung cấp khi thiết lập dự án.
Kiểm thử API FlightSpecials
Bạn có thể kiểm tra trạng thái của việc triển khai thay đổi mã nguồn thông qua đường dẫn trên CodeStar project dashboard. Khi quá trình triển khai đã hoàn tất thông qua CI/CD pipeline, bạn đã sẵn sàng để kiểm tra API.
- Truy cập API Gateway console trên trình duyệt và vào APIs, chọn
iDevelop - Flight Specials API
để tiết lộ các tài nguyên cho API.
- Chọn vào Stages ở dưới iDevelop - Flight Specials API.
- Mở rộng prod trong danh sách Stages .
- Chọn vào method GET
- Chọn vào Invoke URL trong bảng prod - GET - /flightspecials. Sau một lúc khi hàm Lambda được khởi tạo, bạn sẽ thấy kết quả JSON của việc truy vấn cơ sở dữ liệu MySQL từ hàm Lambda. Ví dụ:
{
"succeeded": true,
"message": "",
"errorCode": 0,
"data": [
{
"id": 1,
"header": "London to Prague",
"body": "Jewel of the East",
"cost": 93,
"expiryDate": 1504072439813
},
{
"id": 2,
"header": "Paris to London",
"body": "Weekend getaway!",
"cost": 182,
"expiryDate": 1504074888702
}
]
}
Nếu bạn thấy một JSON payload 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. Lưu ý rằng việc triển khai nhanh hơn và dễ dàng hơn mà không cần bất kỳ sự can thiệp thủ công nào và bạn thậm chí không phải tương tác với AWS CLI hoặc Bảng điều khiển? Mọi thứ được thúc đẩy bởi quá trình đăng ký kiểm soát nguồn.
Bây giờ bạn đã sẵn sàng tích hợp các API này với website TravelBuddy.