มีสภาพแวดล้อมที่สามารถส่งมอบได้ อเมซอน SageMaker อินสแตนซ์โน้ตบุ๊กช่วยให้นักวิทยาศาสตร์ข้อมูลและนักวิเคราะห์ธุรกิจสามารถตอบสนองความต้องการขององค์กรได้อย่างรวดเร็ว ข้อมูลเป็นส่วนสำคัญขององค์กร และการวิเคราะห์ข้อมูลอย่างมีประสิทธิภาพจะให้ข้อมูลเชิงลึกที่เป็นประโยชน์สำหรับธุรกิจ ปัญหาทั่วไปที่องค์กรพบคือการสร้างรูปแบบอัตโนมัติที่ช่วยให้ทีมพัฒนาสามารถเปิดใช้งานบริการของ AWS ได้ องค์กรต้องการให้นักพัฒนาสามารถเปิดใช้ทรัพยากรได้ตามต้องการ แต่เป็นแบบรวมศูนย์และปลอดภัย
โพสต์นี้สาธิตวิธีรวมการจัดการสมุดบันทึกอินสแตนซ์ SageMaker โดยใช้บริการของ AWS ซึ่งรวมถึง การก่อตัวของ AWS Cloud, โมเดลแอปพลิเคชัน AWS Serverless (AWS แซม) แคตตาล็อกบริการของ AWS, อเมซอน EventBridge, ที่เก็บพารามิเตอร์ AWS Systems Manager, Amazon API Gateway Amazonและ AWS แลมบ์ดา. เราอธิบายวิธีการใช้บริการ AWS เหล่านี้เพื่อทำให้กระบวนการจำหน่ายโน้ตบุ๊ก SageMaker แก่ผู้ใช้ปลายทางเป็นแบบอัตโนมัติ
ภาพรวมโซลูชัน
ในโซลูชันของเรา ผู้ใช้โน้ตบุ๊กขออินสแตนซ์โน้ตบุ๊กโดยใช้ AWS Service Catalog คำขอได้รับการประมวลผลโดย AWS CloudFormation ซึ่งส่งมอบอินสแตนซ์โน้ตบุ๊ก EventBridge จะตรวจสอบ AWS Service Catalog API เพื่อความสมบูรณ์ของการจัดเตรียมทรัพยากรอินสแตนซ์โน้ตบุ๊ก กฎที่อิงตามเหตุการณ์ใน EventBridge เรียกตัวประมวลผลเหตุการณ์ Lambda ซึ่งเรียกใช้ฟังก์ชัน Lambda โดยส่งคืน URL ที่กำหนดไว้
แผนภาพสถาปัตยกรรมต่อไปนี้แสดงสถานะโครงสร้างพื้นฐานตามที่กำหนดไว้ในเทมเพลต CloudFormation
กระบวนการประกอบด้วยขั้นตอนต่อไปนี้:
- ผู้ใช้ขอสมุดบันทึกใหม่ผ่านคอนโซล AWS Service Catalog
- AWS Service Catalog เปิดตัวสแต็ก CloudFormation
- AWS CloudFormation เปิดตัวสมุดบันทึก SageMaker
- ขณะนี้สมุดบันทึก SageMaker กำลังทำงานอยู่
- ฟังก์ชัน EventBridge จะถูกทริกเกอร์เมื่อมีการเปิดตัวผลิตภัณฑ์ AWS Service Catalog ใหม่
- พื้นที่ อเมซอน คลาวด์วอตช์ เหตุการณ์จะเรียกใช้ฟังก์ชัน Lambda ที่สร้าง URL ที่กำหนดไว้และพารามิเตอร์ SSM เฉพาะผู้ใช้
- ผู้ใช้ร้องขอ URL ที่กำหนดไว้ใหม่
- ฟังก์ชัน Lambda จะสร้าง URL ที่กำหนดไว้ใหม่และอัปเดตพารามิเตอร์ SSM ของผู้ใช้ด้วย URL ใหม่
เบื้องต้น
เมื่อต้องการใช้โซลูชันนี้ คุณต้องมีข้อกำหนดเบื้องต้นต่อไปนี้:
ปรับใช้ทรัพยากรด้วย AWS CloudFormation
หากต้องการสร้างทรัพยากรของคุณด้วย AWS CloudFormation ให้ทำตามขั้นตอนต่อไปนี้:
- ปรับใช้
s3-iam-config
เทมเพลต 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
ผลลัพธ์ควรมีลักษณะเหมือนรหัสต่อไปนี้:
{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/s3-iam-config/9be9f990-0909-11eb-811c-0a78092beb51"
}
เทมเพลตจะสร้างไฟล์ บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (Amazon S3) ถัง
- รันคำสั่งต่อไปนี้เพื่อรับชื่อบัคเก็ต S3 ที่สร้างขึ้นในขั้นตอนก่อนหน้า:
aws cloudformation describe-stacks --stack-name s3-iam-config --query "Stacks[0].Outputs[?OutputKey=='S3BucketName'].OutputValue" --output text
ผลลัพธ์ควรมีลักษณะดังนี้:
s3-iam-config-s3bucket-1p85zr5051d86
- รันคำสั่งต่อไปนี้โดยใช้เอาต์พุตจากขั้นตอนก่อนหน้า (อัปเดตชื่อบัคเก็ต):
aws s3 cp templates/sm-notebook.yml s3://<bucket_name>/sm-notebook.yml
ผลลัพธ์ควรมีลักษณะดังนี้:
upload: templates/sm-notebook.yml to s3://s3-iam-config-s3bucket-1p85zr5051d86/sm-notebook.yml
- เปิด
parameters/service-catalog-params.json
ไฟล์และอัปเดต S3BucketName
พารามิเตอร์ไปยังชื่อบัคเก็ตจากขั้นตอนก่อนหน้า อัพเดต UserIAMPrincipal
ด้วย ARN ของบทบาท IAM ที่คุณใช้สำหรับการสาธิตนี้
[ { "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>" }
]
- ปรับใช้
service-catalog
เทมเพลต 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
ผลลัพธ์ควรมีลักษณะดังนี้:
{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/service-catalog-config/fb29c5e0-28a0-11ec-8337-123f746ae8a3"
}
ปรับใช้ทรัพยากรด้วย AWS SAM
หากต้องการปรับใช้ทรัพยากรด้วย AWS SAM ให้ทำตามขั้นตอนต่อไปนี้:
- เปลี่ยนไดเร็กทอรีของคุณเป็น
lambda
ไดเรกทอรี:
- สร้างแอปพลิเคชัน:
ผลลัพธ์ควรมีลักษณะดังนี้:
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
- ปรับใช้แอปพลิเคชัน:
- ตอบคำถามใน CLI ดังแสดงในรหัสต่อไปนี้:
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
ผลลัพธ์ควรมีลักษณะดังนี้:
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
ทดสอบวิธีแก้ปัญหา
ตอนนี้คุณได้ปรับใช้โซลูชันแล้ว มาทดสอบเวิร์กโฟลว์กัน
- บนคอนโซล AWS Service Catalog ภายใต้ การบริหารจัดการ ในบานหน้าต่างนำทาง ให้เลือก พอร์ตการลงทุน.
- เลือกสมุดบันทึก SageMaker ของคุณ
- Choose เปิดตัวสินค้า.
- ที่ด้านล่างของหน้า ให้เลือก เปิดตัวสินค้า.
คุณควรเห็นหน้าที่คล้ายกับภาพหน้าจอต่อไปนี้
- รอสักครู่เพื่อให้สถานะแสดงเป็น
Available
.
- เปิดเทอร์มินัลของคุณและรันคำสั่งต่อไปนี้เพื่อรับ URL ที่กำหนดไว้จากที่เก็บพารามิเตอร์:
aws ssm get-parameter --name "/SageMaker/Notebooks/Demo-User-Notebook" --query Parameter.Value
ผลลัพธ์ควรมีลักษณะดังนี้:
"https://demo-user-notebook.notebook.us-east-1.sagemaker.aws?authToken=eyJhbGciOiJIUzI1NiJ9.eyJmYXNDcmVkZW50aWFscyI6IkFZQURlSlVvLzJjeEcwQ0xtNHBjTTZFOGM1SUFYd0FCQUJWaGQzTXRZM0o1Y0hSdkxYQjFZbXhwWXkxclpYa0FSRUV3U0ZSdU1rNXJZMUpyWnpWWVlsZFBRbUowTmtadVpGcHZlRlJXUW05SVlWaHdiazFJY25WRWVrTmtlVWRUVUZsak56UnhObWQzVTJGS1dYUm5hVk40VVQwOUFBRUFCMkYzY3kxcmJYTUFTMkZ5YmpwaGQzTTZhMjF6T25WekxXVmhjM1F0TVRvM05qUTNNRGM1TWpRME1UVTZhMlY1TDJJM01ETTNNRE5oTFdVMU5HTXROR1JtWWkxaE1HRTFMVGMyTnpNek1XWXlORGsxT1FDNEFRSUJBSGhlY3J4TGdEdDJaWmRKYk5nd3R4RHJpWmtZQnZUR1cwZWZCWVhaVW1VTTFBRXNiUlBXblloT3hjUWhPUE9jR0FaZUFBQUFmakI4QmdrcWhraUc5dzBCQndhZ2J6QnRBZ0VBTUdnR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTUFnMjM1NzZRT1l6azgyc29BZ0VRZ0RzejlwVHd4Q2ZZUHd6SGJvZERIaElRa1BRWjdUUXRxZ2dEaVpkTDBtMnIxaW1jVHp5czJHc0t6T3d2Z2g1cGNSSytVS2ZxTXlnTmVhaHVVd0lBQUFBQURBQUFFQUFBQUFBQUFBQUFBQUFBQUFET3ZoZFMvb01sTE4xZ3hQSFkybklQLy8vLy93QUFBQUVBQUFBQUFBQUFBQUFBQUFFQUFBTmZFc2JYV1RDWXorV0o0S3BwSXhEMkpkMVFzUnZFbW9lS21hZDhvSmNSN0tRMi9CQWd3TTA3YUFOOEN1WE8yc2lLUnpZdjI1YmlLOFYzUDM2d1Fjc3RoS085Ui91TFFzNWk4RytHc3BZSnlNamRsbWdWYTFEd2FZQmd0TUMwcmJMRjZSWXJhcFJtMFArbDVIQWg3bWNyeU9lejZWRVlYTmdJY2FXR0tjZDFwRjQ5bXBLTzNyQW5BSGlCdEVaNCtlSVFYVkJwMmQyV2c4TEFqR0RRYVNyclVBOUhJa3pvaloybm5iVHluY3pLWXlNVjA3Ui8wZmVTZU9jTTBubC9IRHdjWUdyc1RCcDgzM1RVWCtkOGRNRXI4amtpQVAwUTFQRkNrU2h5WS9CU05IalZtWThxd094N05jV3g1ZVpSenl3cm0vWXNZOW5paEt5cWRMaGNIQUhDbXZhWW8yb2lMZ3BGak51WG5udlh1U1UxcmFlRVZMNUlKR1loMVAzRWZnR3huNmlsUTJmVGllQytQdWNmT3dsZWwrSnR5SWNmbVRTeFB0bnE1YW1mVjEycml0Skx5a09WMklEc0YzSEl6RW11SmhYZTBqKzM1dWlITW5BVkFZVm5RbithdWh1K3lVcUNKeWVWU1o2ZWVsYmIwd2tYUGNpOXBkazFMbTFLNUpZcFJuMFoyS1hvSnBxNm52b3pPWkdvNG9jbmVRQWhKODRiYjR6RkdGZ1NOaTdQWEFuMnpDTkZ1S2w0eU9KVldiRDRXMGZGSFc1OE5iUTE5amc5Zlp0czlkVmxKclowSmVrYTJhZi9TaUpoeWdvcDBwQ0pBS0pZZkErVEhTQmdCUTFNUWpyUXV5U25jbnQ4NU5XUW1uVG9PUGJ4bVlyN0JRMllpQlJsekdxSDNuQ0pXN2x4YmNzYUV1c1dFMXB3K0RJc2lLMEV1YVV6anBFWFV0NEt4Zm82T3B3b28vdVcyV0dlSmNQVHk4TkNRYWZlUU1VbXgwaDQ3aDF0UHNIY0hBUjltKzU2c3BzMnJETjl4ZTFUMVdHVDg4a3FFMW5YYzRQeUZNdTVuYXB0UEdUU1B0akpZWDRKKzRsSzlJZzZCNG9qRTNmVEEzUVllSTd0dU9UZG9Vd2R6SkJ4L1NvSjNxU0ZUMWRDZXFDeUcyWUN5cjN0TmFzZlpYNFBBWmU4b1M1QVZTeExkVlVqUkpYcW1DM1ZkNUJPRlFySHpReTZjTkFLNFVOY2tBanh3bUgwbFlNdlFtc3lTODRzcCtLUGdpbXl3eWNDdk5tYWQ1bVltRHRZYVpMU3JCVUZIVzlDS2tTS2pqWWtBWnZ3MXRnS3h5OE9wNjZDRHY3aEZObzNDUWQ3MGpnV0wyamdnU1RIckJ6blJwK2wxQ1VscnNsblNzaGluTDcwbnp4eU02b1NBbm1FdFVscG9yeG1iWGRUbUxld244R1lQS1ZvT0syd1pobXk0TVQzc2xxRlU1enVTU2tBQnp5eURZb3djR3JxemlBTXNDcEZONVhRVk9HNHkzNnlZS3pTU0FVTEppRCtOZFRLeWxJbUFHY3daUUl3TXpoZ25hWitia1h5VmErTWUrYmwxUHBrUXcwMWxMUDZNcExnTGRPbkVKb0RRM0xLc2pLZHlidWx4cmlNK011SEFqRUF3V00zdXpjemZyY1ZWOGNwUzdlUDlBRXluNks5NkNQNFBiVCtYK1VVZERqYXZkR1hrenY3TklkWG4xem9pU0dpIiwiY2lwaGVyVGV4dCI6IkFRSUJBSGhlY3J4TGdEdDJaWmRKYk5nd3R4RHJpWmtZQnZUR1cwZWZCWVhaVW1VTTFBRVRlWjBib1lRWDZSazJ1dzdNREJZY0FBQUFvakNCbndZSktvWklodmNOQVFjR29JR1JNSUdPQWdFQU1JR0lCZ2txaGtpRzl3MEJCd0V3SGdZSllJWklBV1VEQkFFdU1CRUVERjVkR1VSbkt5ZlA4S2dKTVFJQkVJQmJyTkJkSkZEOWhySytrajEvTDRieXMxMlFmR2dxM1pSTVlGa2lwNjJXZGZ2aUhvdkswQ3pKY0VtSUE4akY5cktPRm5ZblFoeHpHdmhxZy84VjU4RjUxbWFKUkJIY0RlUzdjSGRpSkdhOW1MbmZuVzFwQVhoaUp1WlRCdz09Iiwid29ya3NwYWNlTmFtZSI6ImRlbW8tdXNlci1ub3RlYm9vayIsIndvcmtzcGFjZURvbWFpbk5hbWUiOiJkZW1vLXVzZXItbm90ZWJvb2siLCJzdWIiOiIxOTU4ODk2NzE2OTAiLCJleHAiOjE2MzgxNDAyMTQsImlhdCI6MTYzODEzODQxNH0.duv90DKJDan6ZOI_uwgP3sQEtManyMCD61tnhZtI-mY"
กฎของ EventBridge
EventBridge ได้รับการกำหนดค่าด้วยกฎเหตุการณ์เพื่อประมวลผลการตอบสนองของ API สำหรับ AWS Service Catalog API กฎนี้ได้รับการกำหนดค่าให้ส่งผ่านสถานะอินสแตนซ์โน้ตบุ๊ก เพื่อให้คุณสามารถใช้ Lambda เพื่อส่งคืนการตอบสนอง URL ที่กำหนดไว้เป็นการดำเนินการที่ถูกทริกเกอร์ กฎเหตุการณ์ได้รับการกำหนดค่าดังนี้:
{ "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["servicecatalog.amazonaws.com"], "eventName": ["ProvisionProduct"] }
}
ภาพหน้าจอต่อไปนี้ของคอนโซล EventBridge จะแสดงกฎเหตุการณ์ของคุณ
พื้นที่ AWS CloudTrail API กำลังถูกตรวจสอบโดยใช้แหล่งเหตุการณ์สำหรับ servicecatalog.amazonaws.com
. ชื่อเหตุการณ์ที่ถูกตรวจสอบคือ ProvisionProduct
. การตรวจสอบเหตุการณ์นี้ช่วยให้คุณสามารถดำเนินการอย่างมีประสิทธิภาพเพื่อตอบสนองต่อ AWS Service Catalog ที่รายงานสถานะการจัดส่งอินสแตนซ์โน้ตบุ๊กที่สำเร็จ เมื่อ ProvisionProduct
เหตุการณ์เกิดขึ้น โดยมีการเรียกฟังก์ชัน Lambda DemoEventBridgeFunction
ถูกเรียกใช้ ซึ่งจะส่งคืน URL ที่กำหนดไว้ให้กับผู้ใช้ปลายทาง
ฟังก์ชัน Lambda สำหรับส่งคืน URL อินสแตนซ์สมุดบันทึกที่กำหนดไว้
เพื่อให้แน่ใจว่าสามารถเข้าถึงสมุดบันทึกที่ผู้ใช้ร้องขอได้อย่างปลอดภัยผ่าน AWS Service Catalog ระบบจะสร้าง URL ที่กำหนดไว้และส่งคืนให้กับผู้ใช้ นี่เป็นวิธีที่ปลอดภัยในการเข้าถึงอินสแตนซ์โน้ตบุ๊กและทำหน้าที่สำคัญทางธุรกิจ เพื่อจุดประสงค์นี้ เราใช้ ฟังก์ชั่น EventBridgeServiceCatalog ฟังก์ชั่นซึ่งใช้ บริกร เพื่อให้สถานะอินสแตนซ์โน้ตบุ๊กพร้อมใช้งาน บริกรจัดเตรียมช่องทางในการสำรวจบริการและระงับการปฏิบัติงานจนกว่าจะตรงตามเงื่อนไขที่กำหนด เมื่อพร้อม ฟังก์ชันจะสร้าง URL ที่กำหนดไว้ สุดท้าย ฟังก์ชันจะสร้างพารามิเตอร์ SSM ด้วย URL ที่กำหนดไว้ซึ่งสร้างขึ้น พารามิเตอร์ SSM ใช้รูปแบบต่อไปนี้: /SageMaker/Notebooks/%s-Notebook"%user_name/
. สิ่งนี้ช่วยให้เราสามารถสร้างเนมสเปซทั่วไปสำหรับพารามิเตอร์ SSM โน้ตบุ๊ก SageMaker ทั้งหมดของเรา ในขณะเดียวกันก็รักษาพารามิเตอร์เหล่านั้นให้ไม่ซ้ำกันโดยยึดตาม user_name
.
URL ที่กำหนดไว้มีการหมดอายุที่กำหนดไว้ ฟังก์ชัน Lambda ปรับใช้สมุดบันทึกโดยมีเซสชันหมดอายุ 12 ชั่วโมง ด้วยเหตุนี้ นักพัฒนาจึงต้องสร้าง URL ที่กำหนดไว้ใหม่เมื่อ URL ที่กำหนดไว้ที่มีอยู่หมดอายุ ที่ ฟังก์ชัน RefreshURL บรรลุผลสำเร็จโดยอนุญาตให้ผู้ใช้เรียกใช้ฟังก์ชันจากการเรียก API Gateway นักพัฒนาสามารถเรียกใช้ฟังก์ชันนี้และส่งชื่อสมุดบันทึกของตน และส่งคืน URL ที่กำหนดไว้ เมื่อ RefreshURLFunction
เสร็จสิ้น ผู้ใช้สามารถโทรไปยังที่เก็บพารามิเตอร์ รับ URL ที่กำหนดไว้ใหม่ จากนั้นจึงเข้าถึงสมุดบันทึกของตนได้
- รับ
RefreshURLFunction
URL เกตเวย์ API พร้อมโค้ดต่อไปนี้:
aws cloudformation describe-stacks --stack-name sam-app --query "Stacks[0].Outputs[?OutputKey=='RefreshURLFunctionAPI'].OutputValue" --output text --region us-east-1
ผลลัพธ์ควรมีลักษณะดังนี้:
https://8mnr3ksi0d.execute-api.us-east-1.amazonaws.com/Prod/refreshurl/
- เรียกใช้ฟังก์ชัน
RefreshURLFunction
โดยการเรียก API Gateway อัปเดต input_url
ด้วย URL จากขั้นตอนก่อนหน้า:
curl -X POST <input_url> -d '{"notebook_user_name": "Demo-User"}'
ผลลัพธ์ควรมีลักษณะดังนี้:
{"PreSignedURL": "https://demo-user-notebook-dctz.notebook.us-east-1.sagemaker.aws?authToken=eyJhbGciOiJIUzI1NiJ9.eyJmYXNDcmVkZW50aWFscyI6IkFZQURlRGw3R2E2OWZ3SmhjSlZKcDB1VjR2b0FYd0FCQUJWaGQzTXRZM0o1Y0hSdkxYQjFZbXhwWXkxclpYa0FSRUZzYVcxNVNsZGtXRXhCZGpVNGRIRkVTalo0V25SSk5WWTVUVEZHZFZaTVZtVldWRzQ0Tms1UGRWaEpSVFI2UTBwdGVFZDFWbFUxUzNoc1pYSXJia05YWnowOUFBRUFCMkYzY3kxcmJYTUFTMkZ5YmpwaGQzTTZhMjF6T25WekxXVmhjM1F0TVRvM05qUTNNRGM1TWpRME1UVTZhMlY1TDJJM01ETTNNRE5oTFdVMU5HTXROR1JtWWkxaE1HRTFMVGMyTnpNek1XWXlORGsxT1FDNEFRSUJBSGhlY3J4TGdEdDJaWmRKYk5nd3R4RHJpWmtZQnZUR1cwZWZCWVhaVW1VTTFBRjY1ZFVPdW5vQlY2MVdrTnM2OUVsdUFBQUFmakI4QmdrcWhraUc5dzBCQndhZ2J6QnRBZ0VBTUdnR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTVhsY1gyeW5WMVQxNkdBRHlBZ0VRZ0RzUEVSVllMRVMzN1FVZklvVTZjd3RZdGI4NkIrT212aVF3cm5BOFVDSnZtMjRxYXJORllaOGgzRGlnSy8wVVBSR3hTeFpoaFhWSTA0Q1RlUUlBQUFBQURBQUFFQUFBQUFBQUFBQUFBQUFBQUFBcUEvUnVZOTk2alBLV09zaFNqZS9GLy8vLy93QUFBQUVBQUFBQUFBQUFBQUFBQUFFQUFBTlhGZFYwR1FHMXZpN2drQkhtOGtmWlBUL0dxcnhOamFSWkU0Tis3ZTJocEI0YXUxS0ozQ2ZnRUMrcHR3dk9JdjQwVGYrdnNWNUt5MjYyNGYvOVhrYmVZQklqdnlLV1JJR0ZyS2dxditVTXdJcE8ydDFIbWcvSmFhdEpGdFhudlJodVcwMG9ldVBLS3ZFeGRKQ3ppYkRkT3J3SG5IMFJqWEhTc2tydGxsTDM2Mll0a3k0Z1cwV2xGOUt3Zm1xb2FjVzZZRTZhV0RUZU9oQWprZXFkQ1FoVi9KRWYwaTA1Q1VxU0k1REZzSC8yS2grZHJxS0tBSVMyTjFRYnNSZ3VGNzFFcnBCM3BoV25PSTFnd3BGL3VNMCs5MHRsTGVCeG5ncElqT1NEY1pkbHlwQmpNZkVadUNYWGU4ZTJGRGQ0bGVENFdOZDdzc0F4OHFQWmV5eWI3WWo2L0FxaUtESmdLOStScS9BVGF6NkRFNFNyL3BaWmpRRFFab1oyV1ZCa2VVWHR2U1piVUd4aXJXRG0rVUUxVk5sbG85TmhwSEhhR1dIZEJPU0w5SUFUWWZDVjV6enVURHNDS2l1dVBQTmFVZGhvSUVuL2c1UXhtOFJvZUlVVUJRcUVvbms3T3d1QzJZOEM2QUowclVxL055T3R5NmF4TWY2VEdYcTFsTHB4WG9wMjlXT3lzR3daQSs4Mmo3em5SZEo2RTZTU005TnJYRi95OWxRS3dBTFBaK3FBNmszSEFvdDg5UlZYSGVMTFQ3TklwazVYVnZlRXY5S3N2MUp1Uk1FVVJEZjI1bnZtOXRmVnp0MUN0R0Y1RVBQNEpid2d5RnZ4RDlnRkVPTUM5dk1rdWloT3JnM3JaaDNwRjd1RDRsVVptVUtTRXV6ZVVmRFd0eEhjVHZoeUxFVmZuczhpcjl6SnFacGxpNVdYdjF3bTQ5WWxJNGlSM1FiamtZM0JybUFsOFBzZkRjYmZJUmVBNmkvQjVNeHFOb3RvU0Y0MHA1OFpJTGZPNmNNWURlVHpzT2dMbENmYXIwT3JMK1lRVk55MU5ETUF3cGRWaXlNeWI1RHl2SzlOV3ZOOUt2c2lMTklrV1IvU2s5ekx1RjBPd3F0aE5GWjhkbWkvMzRzc2pRMUFVR1BMR2ZXbUl1ZmlqRnhrRytnL1lKMjNSa1pIVmRvb1J4TUt3Zmk5OXQvUS96QmI2OUgyQlljbFZwUVl0RGV4Z3ZGWTg2TGpUMm5sSjkya09ad1duWW9OMWpMenIrVTVWQkJKakpDT09ENVA0MXBWckdHN1R4Nlh4UlFscGRqQ3E5ZFhXQlJiRDh6d0JDZ2VMY254SFlZTjUzR2hON2U3S3QyUmZyak5aREtSanUvTWNZSXRSTTVLU2ZaNWFNZ2NJUXY0a0tLNUppVll6OEdaY2VUSE5TT21Zb1FNeG1xMnNOSGJDZzZpUFM4KytvUkErdFhGY1JWMFkxSG9qZlVWS2NzREJjZmFQRVo0TENSZENvZnYrWFVWaHFSNzlCZGpyYW92Wmo1TitqZjFxdHdWZU9mVWJBQm5NR1VDTUN6UU4xMThWMTFZcXcwSWFhbmY0NUtIcjhnUC9MaVZHLzVRTy9yemREbzdZbkZEMmtzM3ZKbFQxVWE5N3kxY25nSXhBS2FxNEJsQ3R4UUc3b2Yxc1BaWld3K2NCalgzcGdIMWhXMHpYOU1zVzJOYXFCSklpUkp1VTJVaUU0cVdDVnh4eVE9PSIsImNpcGhlclRleHQiOiJBUUlCQUhoZWNyeExnRHQyWlpkSmJOZ3d0eERyaVprWUJ2VEdXMGVmQllYWlVtVU0xQUhyWlZxanJHYWVlMUY5c016d2pmM1pBQUFBb2pDQm53WUpLb1pJaHZjTkFRY0dvSUdSTUlHT0FnRUFNSUdJQmdrcWhraUc5dzBCQndFd0hnWUpZSVpJQVdVREJBRXVNQkVFRFBGVFJFbXQ2SmQ2VWoxMExnSUJFSUJibHBFOWtORGxpd21Yb2ltaEFiTC8xNmpYTVRhcDYvNnpSRlFLbjNHWE9mRlVRcUx6VEVBSUQvY095bDlMYU1NdzBRaHBjSWhERmpEL1U1R29sQmUrSHJ4QnJuRk1SMjNrWVR1K2tXUFZVYUcwRExPanl1YVhYR3VDOHc9PSIsIndvcmtzcGFjZU5hbWUiOiJkZW1vLXVzZXItam9lLW5vdGVib29rIiwid29ya3NwYWNlRG9tYWluTmFtZSI6ImRlbW8tdXNlci1qb2Utbm90ZWJvb2steXVvYyIsInN1YiI6IjE5NTg4OTY3MTY5MCIsImV4cCI6MTY0MDc0NDM1OCwiaWF0IjoxNjQwNzQwNzU4fQ.WGFEzQhC3lvA9IguA2tbCS6Us9mhRIV_6LiuRTAytSo"}%
- เปิดเบราว์เซอร์แล้วไปที่
PreSignedURL
จากขั้นตอนที่แล้ว
หน้าเว็บควรมีลักษณะเหมือนภาพหน้าจอต่อไปนี้
สรุป
ในโพสต์นี้ เราได้สาธิตวิธีการปรับใช้ส่วนประกอบโครงสร้างพื้นฐานสำหรับสภาพแวดล้อมอินสแตนซ์โน้ตบุ๊ก SageMaker โดยใช้ AWS CloudFormation จากนั้นเราจะสาธิตวิธีใช้ EventBridge เพื่อส่งคืนสถานะอินสแตนซ์โน้ตบุ๊กจาก AWS Service Catalog API สุดท้ายนี้ เราได้แสดงวิธีใช้ฟังก์ชัน Lambda เพื่อส่งคืน URL อินสแตนซ์สมุดบันทึกที่กำหนดไว้สำหรับการเข้าถึงทรัพยากรที่จัดส่ง สำหรับข้อมูลเพิ่มเติม โปรดดูที่ คู่มือนักพัฒนา Amazon SageMaker. ขอบคุณสำหรับการอ่าน!
เกี่ยวกับผู้เขียน
โจ คีทติ้ง เป็นสถาปนิกอาวุโสด้านการจัดส่งลูกค้าในบริการระดับมืออาชีพที่ Amazon Web Services เขาทำงานร่วมกับลูกค้า AWS เพื่อออกแบบและปรับใช้โซลูชันที่หลากหลายใน AWS Cloud โจสนุกกับการปรุงอาหารด้วยไวน์หนึ่งหรือสองแก้วและประสบความสำเร็จในการเล่นกอล์ฟ
แมตต์ เฮดจ์ส เป็น Cloud Application Architect ที่ Amazon Web Services เขาทำงานอย่างใกล้ชิดกับลูกค้าเพื่อจัดความต้องการด้านเทคโนโลยีให้สอดคล้องกับตัวขับเคลื่อนธุรกิจเพื่อส่งมอบแอปพลิเคชันของพวกเขาบน AWS ด้วยการมุ่งเน้นไปที่การย้ายข้อมูลและความทันสมัย Matt ทำงานร่วมกับลูกค้าองค์กรทั่วโลกเพื่อบุกเบิกการเปลี่ยนแปลงที่ปลดล็อกศักยภาพของระบบคลาวด์อย่างเต็มที่ Matt สนุกกับการใช้เวลาอยู่กับครอบครัว เล่นเครื่องดนตรี ทำอาหาร เล่นวิดีโอเกม ซ่อมรถเก่า และเรียนรู้สิ่งใหม่ๆ
เวอร์จิเนีย ชู เป็นสถาปนิกอาวุโส DevSecOps ในด้านบริการระดับมืออาชีพที่ Amazon Web Services เธอทำงานร่วมกับลูกค้าระดับองค์กรทั่วโลกเพื่อออกแบบและปรับใช้โซลูชันที่หลากหลายใน AWS Cloud