使用 sagemaker api 调用端点时出错
Errors while using sagemaker api to invoke endpoints
我已经在 sagemaker 中部署了一个端点,并试图通过我的 python 程序调用它。我已经使用邮递员对其进行了测试,并且效果很好。然后我写了调用代码如下
import boto3
import pandas as pd
import io
import numpy as np
def np2csv(arr):
csv = io.BytesIO()
np.savetxt(csv, arr, delimiter=',', fmt='%g')
return csv.getvalue().decode().rstrip()
runtime= boto3.client('runtime.sagemaker')
payload = np2csv(test_X)
runtime.invoke_endpoint(
EndpointName='<my-endpoint-name>',
Body=payload,
ContentType='text/csv',
Accept='Accept'
)
现在当我运行这个我得到一个验证错误
ValidationError: An error occurred (ValidationError) when calling the InvokeEndpoint operation: Endpoint <my-endpoint-name> of account <some-unknown-account-number> not found.
在使用 postman 时,我已经提供了我的访问密钥和密钥,但我不确定在使用 sagemaker apis 时如何传递它。我也无法在文档中找到它。
所以我的问题是,如何从我的本地计算机使用 sagemaker api 来调用我的端点?
当您使用任何 AWS SDK(包括用于 Amazon SageMaker 的 SDK)时,您需要在您用于 运行 您的代码的计算机上配置您的 AWS 帐户的凭据。如果您使用的是本地计算机,则可以使用 AWS CLI 流程。您可以在 Python SDK 页面上找到详细说明:https://aws.amazon.com/developers/getting-started/python/
请注意,当您将代码部署到另一台机器时,您必须确保为 EC2、ECS、Lambda 或任何其他目标赋予允许调用此特定端点的角色.虽然在您的本地计算机上可以授予您管理员权限或其他许可权限,但当您部署到远程实例时,您应该尽可能地限制这些权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sagemaker:InvokeEndpoint",
"Resource": "arn:aws:sagemaker:*:1234567890:endpoint/<my-endpoint-name>"
}
]
}
我也遇到了这个问题,结果是我的region
错了。
愚蠢但值得一试!
根据@Jack 的回答,我 运行 aws configure
更改了 default region name
并且成功了。
我已经在 sagemaker 中部署了一个端点,并试图通过我的 python 程序调用它。我已经使用邮递员对其进行了测试,并且效果很好。然后我写了调用代码如下
import boto3
import pandas as pd
import io
import numpy as np
def np2csv(arr):
csv = io.BytesIO()
np.savetxt(csv, arr, delimiter=',', fmt='%g')
return csv.getvalue().decode().rstrip()
runtime= boto3.client('runtime.sagemaker')
payload = np2csv(test_X)
runtime.invoke_endpoint(
EndpointName='<my-endpoint-name>',
Body=payload,
ContentType='text/csv',
Accept='Accept'
)
现在当我运行这个我得到一个验证错误
ValidationError: An error occurred (ValidationError) when calling the InvokeEndpoint operation: Endpoint <my-endpoint-name> of account <some-unknown-account-number> not found.
在使用 postman 时,我已经提供了我的访问密钥和密钥,但我不确定在使用 sagemaker apis 时如何传递它。我也无法在文档中找到它。
所以我的问题是,如何从我的本地计算机使用 sagemaker api 来调用我的端点?
当您使用任何 AWS SDK(包括用于 Amazon SageMaker 的 SDK)时,您需要在您用于 运行 您的代码的计算机上配置您的 AWS 帐户的凭据。如果您使用的是本地计算机,则可以使用 AWS CLI 流程。您可以在 Python SDK 页面上找到详细说明:https://aws.amazon.com/developers/getting-started/python/
请注意,当您将代码部署到另一台机器时,您必须确保为 EC2、ECS、Lambda 或任何其他目标赋予允许调用此特定端点的角色.虽然在您的本地计算机上可以授予您管理员权限或其他许可权限,但当您部署到远程实例时,您应该尽可能地限制这些权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sagemaker:InvokeEndpoint",
"Resource": "arn:aws:sagemaker:*:1234567890:endpoint/<my-endpoint-name>"
}
]
}
我也遇到了这个问题,结果是我的region
错了。
愚蠢但值得一试!
根据@Jack 的回答,我 运行 aws configure
更改了 default region name
并且成功了。