[ad_1]
Điều cuối cùng chúng ta sẽ thảo luận là quá trình triển khai từng thành phần trên AWS. Mỗi đường dẫn dữ liệu, phần phụ trợ và giao diện người dùng đều nằm trong ngăn xếp CloudFormation của riêng chúng (bộ sưu tập tài nguyên AWS). Việc cho phép triển khai những thứ này một cách riêng biệt như thế này sẽ đảm bảo rằng toàn bộ ứng dụng không bị triển khai lại một cách không cần thiết trong quá trình phát triển. Tôi sử dụng AWS SAM (Mô hình ứng dụng không có máy chủ) để triển khai cơ sở hạ tầng cho từng thành phần dưới dạng mã, tận dụng đặc tả mẫu SAM và CLI:
- Đặc tả mẫu SAM — Cú pháp ngắn gọn, đóng vai trò như một phần mở rộng cho AWS CloudFormation, để xác định và định cấu hình các bộ sưu tập tài nguyên AWS, cách chúng tương tác và mọi quyền cần thiết.
- SAM CLI — Một công cụ dòng lệnh được sử dụng để xây dựng và triển khai các tài nguyên như được xác định trong mẫu SAM. Nó xử lý việc đóng gói mã ứng dụng và các phần phụ thuộc, chuyển đổi mẫu SAM thành cú pháp CloudFormation và triển khai các mẫu dưới dạng các ngăn xếp riêng lẻ trên CloudFormation.
Thay vì bao gồm các mẫu hoàn chỉnh (định nghĩa tài nguyên) của từng thành phần, tôi sẽ nêu bật các lĩnh vực quan tâm cụ thể cho từng dịch vụ mà chúng ta đã thảo luận trong suốt bài viết.
Truyền các biến môi trường nhạy cảm tới tài nguyên AWS:
Các thành phần bên ngoài như API dữ liệu Youtube, API OpenAI và API Pinecone được phụ thuộc rất nhiều trong toàn bộ ứng dụng. Mặc dù có thể mã hóa cứng các giá trị này vào các mẫu CloudFormation và chuyển chúng dưới dạng ‘tham số’, nhưng một phương pháp an toàn hơn là tạo bí mật cho từng giá trị trong AWS SecretsManager và tham chiếu các bí mật này trong mẫu như sau:
Parameters:
YoutubeDataAPIKey:
Kind: String
Default: '{{resolve:secretsmanager:youtube-data-api-key:SecretString:youtube-data-api-key}}'
PineconeAPIKey:
Kind: String
Default: '{{resolve:secretsmanager:pinecone-api-key:SecretString:pinecone-api-key}}'
OpenaiAPIKey:
Kind: String
Default: '{{resolve:secretsmanager:openai-api-key:SecretString:openai-api-key}}'
Xác định hàm Lambda:
Các đơn vị mã phi máy chủ này tạo thành xương sống của đường dẫn dữ liệu và đóng vai trò là điểm truy cập vào phần phụ trợ của ứng dụng net. Để triển khai những thứ này bằng SAM, việc này đơn giản chỉ là xác định đường dẫn đến mã mà hàm sẽ chạy khi được gọi, cùng với mọi quyền và biến môi trường cần thiết. Dưới đây là ví dụ về một trong các hàm được sử dụng trong đường dẫn dữ liệu:
FetchLatestVideoIDsFunction:
Kind: AWS::Serverless::Operate
Properties:
CodeUri: ../code_uri/.
Handler: chatytt.youtube_data.lambda_handlers.fetch_latest_video_ids.lambda_handler
Insurance policies:
- AmazonS3FullAccess
Atmosphere:
Variables:
PLAYLIST_NAME:
Ref: PlaylistName
YOUTUBE_DATA_API_KEY:
Ref: YoutubeDataAPIKey
Truy xuất định nghĩa của đường dẫn dữ liệu bằng Ngôn ngữ các bang của Amazon:
Để sử dụng Step Capabilities làm bộ điều phối cho các hàm Lambda riêng lẻ trong đường dẫn dữ liệu, chúng ta cần xác định thứ tự thực thi từng hàm cũng như các cấu hình như số lần thử lại tối đa trong Amazon States Ngôn ngữ. Một cách dễ dàng để làm điều này là sử dụng Xưởng quy trình làm việc trong bảng điều khiển Step Capabilities để tạo sơ đồ quy trình làm việc, sau đó lấy định nghĩa ASL được tạo tự động của quy trình làm điểm bắt đầu có thể được thay đổi một cách thích hợp. Sau đó, điều này có thể được liên kết trong mẫu CloudFormation thay vì được xác định tại chỗ:
EmbeddingRetrieverStateMachine:
Kind: AWS::Serverless::StateMachine
Properties:
DefinitionUri: statemachine/embedding_retriever.asl.json
DefinitionSubstitutions:
FetchLatestVideoIDsFunctionArn: !GetAtt FetchLatestVideoIDsFunction.Arn
FetchLatestVideoTranscriptsArn: !GetAtt FetchLatestVideoTranscripts.Arn
FetchLatestTranscriptEmbeddingsArn: !GetAtt FetchLatestTranscriptEmbeddings.Arn
Occasions:
WeeklySchedule:
Kind: Schedule
Properties:
Description: Schedule to run the workflow as soon as per week on a Monday.
Enabled: true
Schedule: cron(0 3 ? * 1 *)
Insurance policies:
- LambdaInvokePolicy:
FunctionName: !Ref FetchLatestVideoIDsFunction
- LambdaInvokePolicy:
FunctionName: !Ref FetchLatestVideoTranscripts
- LambdaInvokePolicy:
FunctionName: !Ref FetchLatestTranscriptEmbeddings
Nhìn thấy đây đối với định nghĩa ASL được sử dụng cho đường dẫn dữ liệu được thảo luận trong bài đăng này.
Xác định tài nguyên API:
Vì API cho ứng dụng net sẽ được lưu trữ riêng biệt với giao diện người dùng nên chúng tôi phải bật hỗ trợ CORS (chia sẻ tài nguyên trên nhiều nguồn gốc) khi xác định tài nguyên API:
ChatYTTApi:
Kind: AWS::Serverless::Api
Properties:
StageName: Prod
Cors:
AllowMethods: "'*'"
AllowHeaders: "'*'"
AllowOrigin: "'*'"
Điều này sẽ cho phép hai tài nguyên giao tiếp tự do với nhau. Các điểm cuối khác nhau có thể truy cập được thông qua hàm Lambda có thể được xác định như sau:
ChatResponseFunction:
Kind: AWS::Serverless::Operate
Properties:
Runtime: python3.9
Timeout: 120
CodeUri: ../code_uri/.
Handler: server.lambda_handler.lambda_handler
Insurance policies:
- AmazonDynamoDBFullAccess
MemorySize: 512
Architectures:
- x86_64
Atmosphere:
Variables:
PINECONE_API_KEY:
Ref: PineconeAPIKey
OPENAI_API_KEY:
Ref: OpenaiAPIKey
Occasions:
GetQueryResponse:
Kind: Api
Properties:
RestApiId: !Ref ChatYTTApi
Path: /get-query-response/
Technique: submit
GetChatHistory:
Kind: Api
Properties:
RestApiId: !Ref ChatYTTApi
Path: /get-chat-history/
Technique: get
UpdateChatHistory:
Kind: Api
Properties:
RestApiId: !Ref ChatYTTApi
Path: /save-chat-history/
Technique: put
Xác định tài nguyên ứng dụng React:
AWS Amplify có thể xây dựng và triển khai các ứng dụng bằng cách sử dụng tham chiếu đến kho lưu trữ Github có liên quan và mã thông báo truy cập thích hợp:
AmplifyApp:
Kind: AWS::Amplify::App
Properties:
Title: amplify-chatytt-client
Repository: <https://github.com/suresha97/ChatYTT>
AccessToken: '{{resolve:secretsmanager:github-token:SecretString:github-token}}'
IAMServiceRole: !GetAtt AmplifyRole.Arn
EnvironmentVariables:
- Title: ENDPOINT
Worth: !ImportValue 'chatytt-api-ChatYTTAPIURL'
Sau khi có thể truy cập vào kho lưu trữ, Ampify sẽ tìm tệp cấu hình có hướng dẫn về cách xây dựng và triển khai ứng dụng:
model: 1
frontend:
phases:
preBuild:
instructions:
- cd consumer
- npm ci
construct:
instructions:
- echo "VITE_ENDPOINT=$ENDPOINT" >> .env
- npm run construct
artifacts:
baseDirectory: ./consumer/dist
information:
- "**/*"
cache:
paths:
- node_modules/**/*
Là một phần thưởng, cũng có thể tự động hóa quá trình triển khai liên tục bằng cách xác định tài nguyên nhánh sẽ được theo dõi và sử dụng để tự động triển khai lại ứng dụng sau các cam kết tiếp theo:
AmplifyBranch:
Kind: AWS::Amplify::Department
Properties:
BranchName: primary
AppId: !GetAtt AmplifyApp.AppId
EnableAutoBuild: true
Khi quá trình triển khai được hoàn tất theo cách này, bất kỳ ai có liên kết được cung cấp từ bảng điều khiển AWS Amplify đều có thể truy cập được. Có thể tìm thấy bản demo được ghi lại của ứng dụng đang được truy cập như thế này đây:
[ad_2]
Source link