Có một môi trường có khả năng cung cấp Amazon SageMaker các phiên bản máy tính xách tay nhanh chóng cho phép các nhà khoa học dữ liệu và nhà phân tích kinh doanh đáp ứng hiệu quả các nhu cầu của tổ chức. Dữ liệu là mạch máu của một tổ chức và việc phân tích dữ liệu đó một cách hiệu quả sẽ cung cấp thông tin chi tiết hữu ích cho doanh nghiệp. Một vấn đề phổ biến mà các tổ chức gặp phải là tạo một mẫu tự động cho phép các nhóm phát triển khởi chạy các dịch vụ AWS. Các tổ chức muốn cho phép các nhà phát triển của họ khởi chạy tài nguyên khi họ cần, nhưng theo cách tập trung và an toàn.
Bài đăng này trình bày cách tập trung quản lý sổ ghi chép bản sao của SageMaker bằng cách sử dụng các dịch vụ AWS bao gồm Hình thành đám mây AWS, Mô hình ứng dụng không có máy chủ AWS (AWS SAM), Danh mục dịch vụ AWS, Sự kiện Amazon, Cửa hàng thông số trình quản lý hệ thống AWS, Cổng API Amazonvà AWS Lambda. Chúng tôi hướng dẫn cách sử dụng các dịch vụ AWS này để tự động hóa quy trình bán máy tính xách tay SageMaker tự động cho người dùng cuối.
Tổng quan về giải pháp
Trong giải pháp của chúng tôi, người dùng sổ ghi chép yêu cầu một phiên bản sổ ghi chép sử dụng Danh mục dịch vụ AWS. Yêu cầu được xử lý bởi AWS CloudFormation, cung cấp phiên bản sổ ghi chép. EventBridge giám sát API danh mục dịch vụ AWS để hoàn thành việc cung cấp tài nguyên phiên bản máy tính xách tay. Một quy tắc dựa trên sự kiện trong EventBridge gọi bộ xử lý sự kiện Lambda, bộ xử lý này chạy một hàm Lambda trả về URL được chỉ định trước.
Sơ đồ kiến trúc sau minh họa trạng thái cơ sở hạ tầng như được xác định trong các mẫu CloudFormation.
Quy trình bao gồm các bước sau:
- Người dùng yêu cầu sổ ghi chép mới thông qua bảng điều khiển Danh mục dịch vụ AWS.
- Danh mục dịch vụ AWS khởi chạy ngăn xếp CloudFormation.
- AWS CloudFormation khởi chạy sổ ghi chép SageMaker.
- Sổ ghi chép SageMaker hiện đang chạy.
- Chức năng EventBridge được kích hoạt khi sản phẩm Danh mục dịch vụ AWS mới được khởi chạy.
- Sản phẩm amazoncloudwatch sự kiện gọi hàm Lambda tạo URL được chỉ định trước và tham số SSM dành riêng cho người dùng.
- Người dùng yêu cầu một URL mới được chỉ định trước.
- Một hàm Lambda tạo một URL mới được chỉ định trước và cập nhật thông số SSM của người dùng với URL mới.
Điều kiện tiên quyết
Để triển khai giải pháp này, bạn phải có các điều kiện tiên quyết sau:
Triển khai tài nguyên với AWS CloudFormation
Để tạo tài nguyên của bạn với AWS CloudFormation, hãy hoàn thành các bước sau:
- Triển khai
s3-iam-config
Mẫu CloudFormation:
aws cloudformation create-stack --stack-name s3-iam-config --template-body file://templates/s3-iam-config.yml --parameters file://parameters/s3-iam-params.json --capabilities CAPABILITY_NAMED_IAM
Đầu ra sẽ giống như mã sau:
{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/s3-iam-config/9be9f990-0909-11eb-811c-0a78092beb51"
}
Mẫu tạo ra một Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) xô.
- Chạy lệnh sau để lấy tên thùng S3 đã tạo ở bước trước:
aws cloudformation describe-stacks --stack-name s3-iam-config --query "Stacks[0].Outputs[?OutputKey=='S3BucketName'].OutputValue" --output text
Đầu ra sẽ giống như sau:
s3-iam-config-s3bucket-1p85zr5051d86
- Chạy lệnh sau bằng cách sử dụng đầu ra từ bước trước (cập nhật tên nhóm):
aws s3 cp templates/sm-notebook.yml s3://<bucket_name>/sm-notebook.yml
Đầu ra sẽ giống như sau:
upload: templates/sm-notebook.yml to s3://s3-iam-config-s3bucket-1p85zr5051d86/sm-notebook.yml
- Mở
parameters/service-catalog-params.json
tập tin và cập nhật S3BucketName
tham số cho tên nhóm từ bước trước. Cập nhật UserIAMPrincipal
với ARN của vai trò IAM mà bạn đang sử dụng cho bản trình diễn này.
[ { "ParameterKey" : "NotebookInstanceType", "ParameterValue" : "ml.t2.medium" }, { "ParameterKey" : "S3IAMConfigStackName", "ParameterValue" : "s3-iam-config" }, { "ParameterKey" : "ServiceCatalogTemplateName", "ParameterValue" : "sm-notebook.yml" }, { "ParameterKey" : "S3BucketName", "ParameterValue" : "<input_your_bucket_name>" }, { "ParameterKey" : "UserIAMPrincipal", "ParameterValue" : "<input_your_iam_principal_arn>" }
]
- Triển khai
service-catalog
Mẫu CloudFormation:
aws cloudformation create-stack --stack-name service-catalog-config --template-body file://templates/service-catalog.yml --parameters file://parameters/service-catalog-params.json --capabilities CAPABILITY_NAMED_IAM
Đầu ra sẽ giống như sau:
{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/service-catalog-config/fb29c5e0-28a0-11ec-8337-123f746ae8a3"
}
Triển khai tài nguyên với AWS SAM
Để triển khai tài nguyên với AWS SAM, hãy hoàn thành các bước sau:
- Thay đổi thư mục của bạn thành
lambda
danh mục:
- Xây dựng ứng dụng:
Đầu ra sẽ giống như sau:
Built Artifacts : .aws-sam/build
Built Template : .aws-sam/build/template.yaml Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {stack-name} --watch
[*] Deploy: sam deploy --guided
- Triển khai ứng dụng:
- Trả lời các câu hỏi trong CLI như được hiển thị trong đoạn mã sau:
Configuring SAM deploy
====================== Looking for config file [samconfig.toml] : Found Reading default arguments : Success Setting default arguments for 'sam deploy' ========================================= Stack Name [sam-app]: sam-app AWS Region [us-east-1]: us-east-1 Parameter EventBridgeFunctionName [EventBridgeFunction]: EventBridgeFunction Parameter EventRuleName [SvcCatalogEventRule]: SvcCatalogEventRule Parameter RefreshFunctionName [RefreshURLFunction]: RefreshURLFunction #Shows you resources changes to be deployed and require a 'Y' to initiate deploy Confirm changes before deploy [y/N]: N #SAM needs permission to be able to create roles to connect to the resources in your template Allow SAM CLI IAM role creation [Y/n]: Y #Preserves the state of previously provisioned resources when an operation fails Disable rollback [y/N]: N EventBridgeFunction may not have authorization defined, Is this okay? [y/N]: Y RefreshURLFunction may not have authorization defined, Is this okay? [y/N]: Y Save arguments to configuration file [Y/n]: Y SAM configuration file [samconfig.toml]: samconfig.toml SAM configuration environment [default]: dev
Đầu ra sẽ giống như sau:
Looking for resources needed for deployment: Creating the required resources... Successfully created! Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-1f4i68wsmouhw A different default S3 bucket can be set in samconfig.toml Saved arguments to config file Running 'sam deploy' for future deployments will use the parameters saved above. The above parameters can be changed by modifying samconfig.toml Learn more about samconfig.toml syntax at https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html Uploading to sam-app/6f3e2f13cfdca08133238f77fc2c667b 9425988 / 9425988 (100.00%)
Uploading to sam-app/b153fd4be66b581361f7d46efae25f18 9425968 / 9425968 (100.00%) Deploying with following values =============================== Stack name : sam-app Region : us-east-1 Confirm changeset : False Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-1f4i68wsmouhw Capabilities : ["CAPABILITY_IAM"] Parameter overrides : {"EventBridgeFunctionName": "EventBridgeFunction", "EventRuleName": "SvcCatalogEventRule", "RefreshFunctionName": "RefreshURLFunction"} Signing Profiles : {} Initiating deployment
=====================
Uploading to sam-app/c82cdea2bfbc2abc6520a97fce4c8a8b.template 6754 / 6754 (100.00%) Waiting for changeset to be created.. CloudFormation stack changeset
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement -----------------------------------------------------------------------------------------------------------------------------------------------------------------
+ Add EventBridgeFunctionHelloWorldPermissio AWS::Lambda::Permission N/A nProd + Add EventBridgeFunctionRole AWS::IAM::Role N/A + Add EventBridgeFunction AWS::Lambda::Function N/A + Add PermissionForEventsToInvokeLambda AWS::Lambda::Permission N/A + Add RefreshURLFunctionHelloWorldPermission AWS::Lambda::Permission N/A Prod + Add RefreshURLFunctionRole AWS::IAM::Role N/A + Add RefreshURLFunction AWS::Lambda::Function N/A + Add ServerlessRestApiDeploymentb762875163 AWS::ApiGateway::Deployment N/A + Add ServerlessRestApiProdStage AWS::ApiGateway::Stage N/A + Add ServerlessRestApi AWS::ApiGateway::RestApi N/A + Add SvcCatalogEventRule AWS::Events::Rule N/A ----------------------------------------------------------------------------------------------------------------------------------------------------------------- Changeset created successfully. arn:aws:cloudformation:us-east-1:123456789012:changeSet/samcli-deploy1641934511/763fe89c-9c6a-4cef-a1a6-90986d7decfd 2022-01-11 15:55:22 - Waiting for stack create/update to complete CloudFormation events from stack operations
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus ResourceType LogicalResourceId ResourceStatusReason -----------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS AWS::IAM::Role RefreshURLFunctionRole - CREATE_IN_PROGRESS AWS::IAM::Role EventBridgeFunctionRole - CREATE_IN_PROGRESS AWS::IAM::Role EventBridgeFunctionRole Resource creation Initiated CREATE_IN_PROGRESS AWS::IAM::Role RefreshURLFunctionRole Resource creation Initiated CREATE_COMPLETE AWS::IAM::Role EventBridgeFunctionRole - CREATE_IN_PROGRESS AWS::Lambda::Function EventBridgeFunction - CREATE_IN_PROGRESS AWS::Lambda::Function EventBridgeFunction Resource creation Initiated CREATE_COMPLETE AWS::IAM::Role RefreshURLFunctionRole - CREATE_COMPLETE AWS::Lambda::Function EventBridgeFunction - CREATE_IN_PROGRESS AWS::Lambda::Function RefreshURLFunction - CREATE_IN_PROGRESS AWS::Lambda::Function RefreshURLFunction Resource creation Initiated CREATE_IN_PROGRESS AWS::Events::Rule SvcCatalogEventRule - CREATE_IN_PROGRESS AWS::Events::Rule SvcCatalogEventRule Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Function RefreshURLFunction - CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi - CREATE_COMPLETE AWS::ApiGateway::RestApi ServerlessRestApi - CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi Resource creation Initiated CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeploymentb762875163 - CREATE_IN_PROGRESS AWS::Lambda::Permission EventBridgeFunctionHelloWorldPermissio - nProd CREATE_IN_PROGRESS AWS::Lambda::Permission RefreshURLFunctionHelloWorldPermission Resource creation Initiated Prod CREATE_IN_PROGRESS AWS::Lambda::Permission EventBridgeFunctionHelloWorldPermissio Resource creation Initiated nProd CREATE_IN_PROGRESS AWS::Lambda::Permission RefreshURLFunctionHelloWorldPermission - Prod CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeploymentb762875163 Resource creation Initiated CREATE_COMPLETE AWS::ApiGateway::Deployment ServerlessRestApiDeploymentb762875163 - CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage - CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Permission RefreshURLFunctionHelloWorldPermission - Prod CREATE_COMPLETE AWS::Lambda::Permission EventBridgeFunctionHelloWorldPermissio - nProd CREATE_COMPLETE AWS::ApiGateway::Stage ServerlessRestApiProdStage - CREATE_COMPLETE AWS::Events::Rule SvcCatalogEventRule - CREATE_IN_PROGRESS AWS::Lambda::Permission PermissionForEventsToInvokeLambda - CREATE_IN_PROGRESS AWS::Lambda::Permission PermissionForEventsToInvokeLambda Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Permission PermissionForEventsToInvokeLambda - CREATE_COMPLETE AWS::CloudFormation::Stack sam-app - ----------------------------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Outputs ------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key RefreshURLFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:lambda:us-east-1:123456789012:function:RefreshURLFunction Key RefreshURLFunctionAPI Description API Gateway endpoint URL for Prod stage for Hello World function Value https://m94bjaurjb.execute-api.us-east-1.amazonaws.com/Prod/refreshurl/ Key RefreshURLFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-east-1:123456789012:function:RefreshURLFunction ------------------------------------------------------------------------------------------------------------------------------------------------------------------ Successfully created/updated stack - sam-app in us-east-1
Kiểm tra giải pháp
Bây giờ bạn đã triển khai giải pháp, hãy kiểm tra quy trình làm việc.
- Trên bảng điều khiển Danh mục dịch vụ AWS, trong Quản trị trong ngăn điều hướng, chọn Danh mục đầu tư.
- Chọn sổ ghi chép SageMaker của bạn.
- Chọn Ra mắt sản phẩm.
- Ở cuối trang, chọn Ra mắt sản phẩm.
Bạn sẽ thấy một trang tương tự như ảnh chụp màn hình sau đây.
- Chờ một chút để trạng thái hiển thị là
Available
.
- Mở thiết bị đầu cuối của bạn và chạy lệnh sau để lấy URL được chỉ định trước từ Cửa hàng tham số:
aws ssm get-parameter --name "/SageMaker/Notebooks/Demo-User-Notebook" --query Parameter.Value
Đầu ra sẽ giống như sau:
"https://demo-user-notebook.notebook.us-east-1.sagemaker.aws?authToken=eyJhbGciOiJIUzI1NiJ9.eyJmYXNDcmVkZW50aWFscyI6IkFZQURlSlVvLzJjeEcwQ0xtNHBjTTZFOGM1SUFYd0FCQUJWaGQzTXRZM0o1Y0hSdkxYQjFZbXhwWXkxclpYa0FSRUV3U0ZSdU1rNXJZMUpyWnpWWVlsZFBRbUowTmtadVpGcHZlRlJXUW05SVlWaHdiazFJY25WRWVrTmtlVWRUVUZsak56UnhObWQzVTJGS1dYUm5hVk40VVQwOUFBRUFCMkYzY3kxcmJYTUFTMkZ5YmpwaGQzTTZhMjF6T25WekxXVmhjM1F0TVRvM05qUTNNRGM1TWpRME1UVTZhMlY1TDJJM01ETTNNRE5oTFdVMU5HTXROR1JtWWkxaE1HRTFMVGMyTnpNek1XWXlORGsxT1FDNEFRSUJBSGhlY3J4TGdEdDJaWmRKYk5nd3R4RHJpWmtZQnZUR1cwZWZCWVhaVW1VTTFBRXNiUlBXblloT3hjUWhPUE9jR0FaZUFBQUFmakI4QmdrcWhraUc5dzBCQndhZ2J6QnRBZ0VBTUdnR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTUFnMjM1NzZRT1l6azgyc29BZ0VRZ0RzejlwVHd4Q2ZZUHd6SGJvZERIaElRa1BRWjdUUXRxZ2dEaVpkTDBtMnIxaW1jVHp5czJHc0t6T3d2Z2g1cGNSSytVS2ZxTXlnTmVhaHVVd0lBQUFBQURBQUFFQUFBQUFBQUFBQUFBQUFBQUFET3ZoZFMvb01sTE4xZ3hQSFkybklQLy8vLy93QUFBQUVBQUFBQUFBQUFBQUFBQUFFQUFBTmZFc2JYV1RDWXorV0o0S3BwSXhEMkpkMVFzUnZFbW9lS21hZDhvSmNSN0tRMi9CQWd3TTA3YUFOOEN1WE8yc2lLUnpZdjI1YmlLOFYzUDM2d1Fjc3RoS085Ui91TFFzNWk4RytHc3BZSnlNamRsbWdWYTFEd2FZQmd0TUMwcmJMRjZSWXJhcFJtMFArbDVIQWg3bWNyeU9lejZWRVlYTmdJY2FXR0tjZDFwRjQ5bXBLTzNyQW5BSGlCdEVaNCtlSVFYVkJwMmQyV2c4TEFqR0RRYVNyclVBOUhJa3pvaloybm5iVHluY3pLWXlNVjA3Ui8wZmVTZU9jTTBubC9IRHdjWUdyc1RCcDgzM1RVWCtkOGRNRXI4amtpQVAwUTFQRkNrU2h5WS9CU05IalZtWThxd094N05jV3g1ZVpSenl3cm0vWXNZOW5paEt5cWRMaGNIQUhDbXZhWW8yb2lMZ3BGak51WG5udlh1U1UxcmFlRVZMNUlKR1loMVAzRWZnR3huNmlsUTJmVGllQytQdWNmT3dsZWwrSnR5SWNmbVRTeFB0bnE1YW1mVjEycml0Skx5a09WMklEc0YzSEl6RW11SmhYZTBqKzM1dWlITW5BVkFZVm5RbithdWh1K3lVcUNKeWVWU1o2ZWVsYmIwd2tYUGNpOXBkazFMbTFLNUpZcFJuMFoyS1hvSnBxNm52b3pPWkdvNG9jbmVRQWhKODRiYjR6RkdGZ1NOaTdQWEFuMnpDTkZ1S2w0eU9KVldiRDRXMGZGSFc1OE5iUTE5amc5Zlp0czlkVmxKclowSmVrYTJhZi9TaUpoeWdvcDBwQ0pBS0pZZkErVEhTQmdCUTFNUWpyUXV5U25jbnQ4NU5XUW1uVG9PUGJ4bVlyN0JRMllpQlJsekdxSDNuQ0pXN2x4YmNzYUV1c1dFMXB3K0RJc2lLMEV1YVV6anBFWFV0NEt4Zm82T3B3b28vdVcyV0dlSmNQVHk4TkNRYWZlUU1VbXgwaDQ3aDF0UHNIY0hBUjltKzU2c3BzMnJETjl4ZTFUMVdHVDg4a3FFMW5YYzRQeUZNdTVuYXB0UEdUU1B0akpZWDRKKzRsSzlJZzZCNG9qRTNmVEEzUVllSTd0dU9UZG9Vd2R6SkJ4L1NvSjNxU0ZUMWRDZXFDeUcyWUN5cjN0TmFzZlpYNFBBWmU4b1M1QVZTeExkVlVqUkpYcW1DM1ZkNUJPRlFySHpReTZjTkFLNFVOY2tBanh3bUgwbFlNdlFtc3lTODRzcCtLUGdpbXl3eWNDdk5tYWQ1bVltRHRZYVpMU3JCVUZIVzlDS2tTS2pqWWtBWnZ3MXRnS3h5OE9wNjZDRHY3aEZObzNDUWQ3MGpnV0wyamdnU1RIckJ6blJwK2wxQ1VscnNsblNzaGluTDcwbnp4eU02b1NBbm1FdFVscG9yeG1iWGRUbUxld244R1lQS1ZvT0syd1pobXk0TVQzc2xxRlU1enVTU2tBQnp5eURZb3djR3JxemlBTXNDcEZONVhRVk9HNHkzNnlZS3pTU0FVTEppRCtOZFRLeWxJbUFHY3daUUl3TXpoZ25hWitia1h5VmErTWUrYmwxUHBrUXcwMWxMUDZNcExnTGRPbkVKb0RRM0xLc2pLZHlidWx4cmlNK011SEFqRUF3V00zdXpjemZyY1ZWOGNwUzdlUDlBRXluNks5NkNQNFBiVCtYK1VVZERqYXZkR1hrenY3TklkWG4xem9pU0dpIiwiY2lwaGVyVGV4dCI6IkFRSUJBSGhlY3J4TGdEdDJaWmRKYk5nd3R4RHJpWmtZQnZUR1cwZWZCWVhaVW1VTTFBRVRlWjBib1lRWDZSazJ1dzdNREJZY0FBQUFvakNCbndZSktvWklodmNOQVFjR29JR1JNSUdPQWdFQU1JR0lCZ2txaGtpRzl3MEJCd0V3SGdZSllJWklBV1VEQkFFdU1CRUVERjVkR1VSbkt5ZlA4S2dKTVFJQkVJQmJyTkJkSkZEOWhySytrajEvTDRieXMxMlFmR2dxM1pSTVlGa2lwNjJXZGZ2aUhvdkswQ3pKY0VtSUE4akY5cktPRm5ZblFoeHpHdmhxZy84VjU4RjUxbWFKUkJIY0RlUzdjSGRpSkdhOW1MbmZuVzFwQVhoaUp1WlRCdz09Iiwid29ya3NwYWNlTmFtZSI6ImRlbW8tdXNlci1ub3RlYm9vayIsIndvcmtzcGFjZURvbWFpbk5hbWUiOiJkZW1vLXVzZXItbm90ZWJvb2siLCJzdWIiOiIxOTU4ODk2NzE2OTAiLCJleHAiOjE2MzgxNDAyMTQsImlhdCI6MTYzODEzODQxNH0.duv90DKJDan6ZOI_uwgP3sQEtManyMCD61tnhZtI-mY"
Quy tắc EventBridge
EventBridge được định cấu hình với quy tắc sự kiện để xử lý phản hồi API cho API danh mục dịch vụ AWS. Quy tắc này được định cấu hình để chuyển trạng thái phiên bản sổ ghi chép để bạn có thể sử dụng Lambda để trả về phản hồi URL được chỉ định trước như một hành động được kích hoạt. Quy tắc sự kiện được định cấu hình như sau:
{ "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["servicecatalog.amazonaws.com"], "eventName": ["ProvisionProduct"] }
}
Ảnh chụp màn hình sau của bảng điều khiển EventBridge hiển thị quy tắc sự kiện của bạn.
Sản phẩm Đường mòn đám mây AWS API đang được giám sát bằng cách sử dụng nguồn sự kiện cho servicecatalog.amazonaws.com
. Tên sự kiện được giám sát là ProvisionProduct
. Theo dõi sự kiện này cho phép bạn thực hiện hành động hiệu quả để đáp lại Danh mục dịch vụ AWS báo cáo lại trạng thái phân phối thành công của phiên bản sổ tay. Khi một ProvisionProduct
sự kiện xảy ra, một hàm Lambda được gọi là DemoEventBridgeFunction
được gọi, trả về một URL được chỉ định trước cho người dùng cuối.
Hàm Lambda để trả về các URL phiên bản sổ tay được chỉ định trước
Để đảm bảo quyền truy cập an toàn vào sổ ghi chép do người dùng yêu cầu thông qua Danh mục dịch vụ AWS, một URL được chỉ định trước sẽ được tạo và trả lại cho người dùng. Điều này cung cấp một phương pháp an toàn để truy cập phiên bản sổ ghi chép và thực hiện các chức năng quan trọng của doanh nghiệp. Với mục đích này, chúng tôi sử dụng EventBridgeServiceCatalogChức năng hàm, sử dụng một phục vụ nam để trạng thái phiên bản sổ tay trở nên khả dụng. Người phục vụ cung cấp một phương tiện để thăm dò một dịch vụ và tạm ngừng thực hiện một nhiệm vụ cho đến khi một điều kiện cụ thể được đáp ứng. Khi nó sẵn sàng, hàm sẽ tạo một URL được chỉ định trước. Cuối cùng, hàm tạo một tham số SSM với URL được chỉ định trước đã tạo. Tham số SSM sử dụng mẫu sau: /SageMaker/Notebooks/%s-Notebook"%user_name/
. Điều này cho phép chúng tôi tạo một không gian tên chung cho tất cả các thông số SSM máy tính xách tay SageMaker của chúng tôi trong khi vẫn giữ chúng duy nhất dựa trên user_name
.
Các URL được chỉ định có thời hạn xác định. Hàm Lambda triển khai sổ ghi chép với thời gian hết hạn phiên là 12 giờ. Do đó, các nhà phát triển cần tạo một URL được chỉ định trước mới khi URL được chỉ định trước hiện tại của họ hết hạn. Các RefreshURLChức năng hoàn thành điều này bằng cách cho phép người dùng gọi hàm từ việc gọi API Gateway. Các nhà phát triển có thể gọi hàm này và chuyển tên sổ ghi chép của họ và nó trả về một URL được chỉ định trước. Khi mà RefreshURLFunction
đã hoàn tất, người dùng có thể thực hiện cuộc gọi đến Cửa hàng tham số, lấy URL được chỉ định trước và sau đó truy cập sổ ghi chép của họ.
- Nhận được
RefreshURLFunction
URL cổng API với mã sau:
aws cloudformation describe-stacks --stack-name sam-app --query "Stacks[0].Outputs[?OutputKey=='RefreshURLFunctionAPI'].OutputValue" --output text --region us-east-1
Đầu ra sẽ giống như sau:
https://8mnr3ksi0d.execute-api.us-east-1.amazonaws.com/Prod/refreshurl/
- Gọi hàm
RefreshURLFunction
bằng cách gọi API Gateway. Cập nhật input_url
với URL từ bước trước:
curl -X POST <input_url> -d '{"notebook_user_name": "Demo-User"}'
Đầu ra sẽ giống như sau:
{"PreSignedURL": "https://demo-user-notebook-dctz.notebook.us-east-1.sagemaker.aws?authToken=eyJhbGciOiJIUzI1NiJ9.eyJmYXNDcmVkZW50aWFscyI6IkFZQURlRGw3R2E2OWZ3SmhjSlZKcDB1VjR2b0FYd0FCQUJWaGQzTXRZM0o1Y0hSdkxYQjFZbXhwWXkxclpYa0FSRUZzYVcxNVNsZGtXRXhCZGpVNGRIRkVTalo0V25SSk5WWTVUVEZHZFZaTVZtVldWRzQ0Tms1UGRWaEpSVFI2UTBwdGVFZDFWbFUxUzNoc1pYSXJia05YWnowOUFBRUFCMkYzY3kxcmJYTUFTMkZ5YmpwaGQzTTZhMjF6T25WekxXVmhjM1F0TVRvM05qUTNNRGM1TWpRME1UVTZhMlY1TDJJM01ETTNNRE5oTFdVMU5HTXROR1JtWWkxaE1HRTFMVGMyTnpNek1XWXlORGsxT1FDNEFRSUJBSGhlY3J4TGdEdDJaWmRKYk5nd3R4RHJpWmtZQnZUR1cwZWZCWVhaVW1VTTFBRjY1ZFVPdW5vQlY2MVdrTnM2OUVsdUFBQUFmakI4QmdrcWhraUc5dzBCQndhZ2J6QnRBZ0VBTUdnR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTVhsY1gyeW5WMVQxNkdBRHlBZ0VRZ0RzUEVSVllMRVMzN1FVZklvVTZjd3RZdGI4NkIrT212aVF3cm5BOFVDSnZtMjRxYXJORllaOGgzRGlnSy8wVVBSR3hTeFpoaFhWSTA0Q1RlUUlBQUFBQURBQUFFQUFBQUFBQUFBQUFBQUFBQUFBcUEvUnVZOTk2alBLV09zaFNqZS9GLy8vLy93QUFBQUVBQUFBQUFBQUFBQUFBQUFFQUFBTlhGZFYwR1FHMXZpN2drQkhtOGtmWlBUL0dxcnhOamFSWkU0Tis3ZTJocEI0YXUxS0ozQ2ZnRUMrcHR3dk9JdjQwVGYrdnNWNUt5MjYyNGYvOVhrYmVZQklqdnlLV1JJR0ZyS2dxditVTXdJcE8ydDFIbWcvSmFhdEpGdFhudlJodVcwMG9ldVBLS3ZFeGRKQ3ppYkRkT3J3SG5IMFJqWEhTc2tydGxsTDM2Mll0a3k0Z1cwV2xGOUt3Zm1xb2FjVzZZRTZhV0RUZU9oQWprZXFkQ1FoVi9KRWYwaTA1Q1VxU0k1REZzSC8yS2grZHJxS0tBSVMyTjFRYnNSZ3VGNzFFcnBCM3BoV25PSTFnd3BGL3VNMCs5MHRsTGVCeG5ncElqT1NEY1pkbHlwQmpNZkVadUNYWGU4ZTJGRGQ0bGVENFdOZDdzc0F4OHFQWmV5eWI3WWo2L0FxaUtESmdLOStScS9BVGF6NkRFNFNyL3BaWmpRRFFab1oyV1ZCa2VVWHR2U1piVUd4aXJXRG0rVUUxVk5sbG85TmhwSEhhR1dIZEJPU0w5SUFUWWZDVjV6enVURHNDS2l1dVBQTmFVZGhvSUVuL2c1UXhtOFJvZUlVVUJRcUVvbms3T3d1QzJZOEM2QUowclVxL055T3R5NmF4TWY2VEdYcTFsTHB4WG9wMjlXT3lzR3daQSs4Mmo3em5SZEo2RTZTU005TnJYRi95OWxRS3dBTFBaK3FBNmszSEFvdDg5UlZYSGVMTFQ3TklwazVYVnZlRXY5S3N2MUp1Uk1FVVJEZjI1bnZtOXRmVnp0MUN0R0Y1RVBQNEpid2d5RnZ4RDlnRkVPTUM5dk1rdWloT3JnM3JaaDNwRjd1RDRsVVptVUtTRXV6ZVVmRFd0eEhjVHZoeUxFVmZuczhpcjl6SnFacGxpNVdYdjF3bTQ5WWxJNGlSM1FiamtZM0JybUFsOFBzZkRjYmZJUmVBNmkvQjVNeHFOb3RvU0Y0MHA1OFpJTGZPNmNNWURlVHpzT2dMbENmYXIwT3JMK1lRVk55MU5ETUF3cGRWaXlNeWI1RHl2SzlOV3ZOOUt2c2lMTklrV1IvU2s5ekx1RjBPd3F0aE5GWjhkbWkvMzRzc2pRMUFVR1BMR2ZXbUl1ZmlqRnhrRytnL1lKMjNSa1pIVmRvb1J4TUt3Zmk5OXQvUS96QmI2OUgyQlljbFZwUVl0RGV4Z3ZGWTg2TGpUMm5sSjkya09ad1duWW9OMWpMenIrVTVWQkJKakpDT09ENVA0MXBWckdHN1R4Nlh4UlFscGRqQ3E5ZFhXQlJiRDh6d0JDZ2VMY254SFlZTjUzR2hON2U3S3QyUmZyak5aREtSanUvTWNZSXRSTTVLU2ZaNWFNZ2NJUXY0a0tLNUppVll6OEdaY2VUSE5TT21Zb1FNeG1xMnNOSGJDZzZpUFM4KytvUkErdFhGY1JWMFkxSG9qZlVWS2NzREJjZmFQRVo0TENSZENvZnYrWFVWaHFSNzlCZGpyYW92Wmo1TitqZjFxdHdWZU9mVWJBQm5NR1VDTUN6UU4xMThWMTFZcXcwSWFhbmY0NUtIcjhnUC9MaVZHLzVRTy9yemREbzdZbkZEMmtzM3ZKbFQxVWE5N3kxY25nSXhBS2FxNEJsQ3R4UUc3b2Yxc1BaWld3K2NCalgzcGdIMWhXMHpYOU1zVzJOYXFCSklpUkp1VTJVaUU0cVdDVnh4eVE9PSIsImNpcGhlclRleHQiOiJBUUlCQUhoZWNyeExnRHQyWlpkSmJOZ3d0eERyaVprWUJ2VEdXMGVmQllYWlVtVU0xQUhyWlZxanJHYWVlMUY5c016d2pmM1pBQUFBb2pDQm53WUpLb1pJaHZjTkFRY0dvSUdSTUlHT0FnRUFNSUdJQmdrcWhraUc5dzBCQndFd0hnWUpZSVpJQVdVREJBRXVNQkVFRFBGVFJFbXQ2SmQ2VWoxMExnSUJFSUJibHBFOWtORGxpd21Yb2ltaEFiTC8xNmpYTVRhcDYvNnpSRlFLbjNHWE9mRlVRcUx6VEVBSUQvY095bDlMYU1NdzBRaHBjSWhERmpEL1U1R29sQmUrSHJ4QnJuRk1SMjNrWVR1K2tXUFZVYUcwRExPanl1YVhYR3VDOHc9PSIsIndvcmtzcGFjZU5hbWUiOiJkZW1vLXVzZXItam9lLW5vdGVib29rIiwid29ya3NwYWNlRG9tYWluTmFtZSI6ImRlbW8tdXNlci1qb2Utbm90ZWJvb2steXVvYyIsInN1YiI6IjE5NTg4OTY3MTY5MCIsImV4cCI6MTY0MDc0NDM1OCwiaWF0IjoxNjQwNzQwNzU4fQ.WGFEzQhC3lvA9IguA2tbCS6Us9mhRIV_6LiuRTAytSo"}%
- Mở trình duyệt và điều hướng đến
PreSignedURL
từ bước trước.
Trang web sẽ giống như ảnh chụp màn hình sau đây.
Kết luận
Trong bài đăng này, chúng tôi đã trình bày cách triển khai các thành phần cơ sở hạ tầng cho môi trường phiên bản máy tính xách tay SageMaker bằng AWS CloudFormation. Sau đó, chúng tôi đã minh họa cách sử dụng EventBridge để trả về trạng thái phiên bản sổ ghi chép từ API danh mục dịch vụ AWS. Cuối cùng, chúng tôi đã hướng dẫn cách sử dụng hàm Lambda để trả về URL phiên bản sổ tay được chỉ định trước để truy cập tài nguyên đã phân phối. Để biết thêm thông tin, hãy xem Hướng dẫn dành cho nhà phát triển Amazon SageMaker. Cảm ơn bạn đã đọc!
Về các tác giả
Joe Keating là Kiến trúc sư cung cấp dịch vụ khách hàng cao cấp về Dịch vụ chuyên nghiệp tại Amazon Web Services. Anh ấy làm việc với các khách hàng của AWS để thiết kế và triển khai nhiều giải pháp khác nhau trong Đám mây AWS. Joe thích nấu ăn với một hoặc hai ly rượu vang và đạt được phong độ tầm thường trên sân gôn.
Hàng rào Matt là Kiến trúc sư ứng dụng đám mây tại Amazon Web Services. Anh ấy làm việc chặt chẽ với khách hàng để điều chỉnh nhu cầu công nghệ với các trình điều khiển doanh nghiệp để cung cấp ứng dụng của họ trên AWS. Với trọng tâm là di cư và hiện đại hóa, Matt làm việc với các khách hàng doanh nghiệp trên toàn thế giới để đi tiên phong trong những thay đổi giúp khai thác toàn bộ tiềm năng của đám mây. Matt thích dành thời gian cho gia đình, chơi nhạc cụ, nấu ăn, chơi trò chơi điện tử, sửa xe cũ và học hỏi những điều mới.
Virginia Chu là Kiến trúc sư DevSecOps Cấp cao về Dịch vụ Chuyên nghiệp tại Amazon Web Services. Cô làm việc với các khách hàng quy mô doanh nghiệp trên toàn cầu để thiết kế và triển khai nhiều giải pháp khác nhau trong Đám mây AWS.