我想在 Amazon Quick Sight 控制面板上使用私有 Amazon Simple Storage Service (Amazon S3) 存储桶中的图像。
解决方法
要在 Quick Sight 控制面板或报告中使用私有 Amazon S3 存储桶中的图像,请使用 AWS Lambda API 或 Amazon CloudFront 控制台。
Lambda API
要使用 Lambda API,请创建一个 Lambda 函数,然后创建一个 Amazon API Gateway 触发器。
创建 Lambda 函数
完成以下步骤:
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择 Buckets(存储桶),然后选择您的存储桶。
- 选择 Upload(上传)。
- 以 .jpg 格式将图像上传到存储桶。
- 运行以下命令以创建 Lambda 函数:
import boto3
import base64
def lambda_handler(event, context):
s3 = boto3.client("s3")
downloaded_s3_object = s3.get_object(Bucket="S3 BUCKET NAME", Key="Image.jpg")
return base64.b64encode(downloaded_s3_object["Body"].read())
**注意:**请将 S3 BUCKET NAME 和 downloaded_s3_object 替换为您的信息。Lambda AWS Identity and Access Management (IAM) 角色必须拥有从 S3 存储桶获取对象的权限。对于 Lambda 函数,请将 Runtime(运行时)设置为 Python 3.9。
- 选择 Deploy(部署)。
创建 API Gateway 触发器
完成以下步骤:
- 打开 API Gateway 控制台。
- 在导航窗格中,选择 API,然后选择 Create API(创建 API)。
- 在 REST API 下,选择 Build(构建)。
- 在 Create REST API(创建 REST API)页面的 API details(API 详细信息)下,选择 New API(新建 API),然后输入以下信息:
输入您的 API 的名称,然后选择 Create API(创建 API)。
(可选)输入 API 的描述。
对于 API endpoint type(API 端点类型),选择 Regional(区域)。然后,选择 Create API(创建 API)。
- 在 Resources(资源)页面的 Methods(方法)下,选择 Create method(创建方法)。
- 在 Create method(创建方法)页面上,输入以下信息:
对于 Method type(方法类型),选择 GET。
对于 Integration type(集成类型),选择 Lambda Function(Lambda 函数)。
对于 Lambda function(Lambda 函数),选择 AWS 区域和您的 Lambda 函数。
- 选择 Create method(创建方法)。
- 在 Resources(资源)页面的 Method request settings(方法请求设置)下,选择 Edit(编辑)。
- 在 Edit method request(编辑方法请求)页面的 HTTP request headers(HTTP 请求标头)下,选择 Add header(添加标头)。
- 对于 Name(名称),输入 Content-Type,然后选择 Save(保存)。
- 在 Resources(资源)页面的 Integration response(集成响应)下,选择 Edit(编辑)。
- 在 Response details(响应详细信息)下,对于 Content handling(内容处理),选择 Convert to binary(转换为二进制)。
- 选择 Save(保存)。
- 部署您的 API。
**注意:**有关详细信息,请参阅为 API Gateway 中的 REST API 设置阶段。
- 在 Stages(阶段)页面的 Stage details(阶段详细信息)下,记下调用 URL。例如,https://1a2bc3d456.execute-api.region.amazonaws.com/test。
- 打开 Quick Suite 控制台。
- 在导航窗格中,选择 Analyses(分析),然后选择要添加图像的分析。
- 在 Visuals(视觉对象)菜单中,选择 Custom visual content(自定义视觉对象内容)。
- 选择 Customize visual(自定义视觉对象)。
- 在 Properties(属性)窗格的 Customize content(自定义内容)下,输入调用 URL。
- 启用 Show as image(显示为图像)选项,然后选择 Apply(应用)。
API Gateway 将返回图像的 base64 字符串。Quick Sight 洞察编辑器使用 API 的 URL 来显示图像。
CloudFront 控制台
完成以下步骤:
- 打开 CloudFront 控制台。
- 在导航窗格中,选择 Distributions(分配),然后选择 Create distribution(创建分配)。
- 在 Create distribution(创建分配)页面上,输入以下信息:
对于 Origin domain(源域),输入您的源的域名。
对于 Origin access(源访问),选择 Origin access control settings (recommended)(源访问控制设置(推荐))。
对于 Origin access control(源访问控制),选择 Create new OAC(创建新 OAC),然后选择 Create(创建)。
- 对于 Web Application Firewall (WAF)(Web 应用程序防火墙 (WAF)),选择 Do not enable security protections(不启用安全保护)。
- 选择 Create distribution(创建分配)。
- 在 Distribution details(分配详细信息)页面上,记下分配域名。例如,d2icdkfpjckhwg.cloufront.net。
- 在 "The S3 bucket policy needs to be updated"(需要更新 S3 存储桶策略)消息中,选择 Copy policy(复制策略)。
- 打开 Amazon S3 控制台。
- 在 General purpose buckets(通用存储桶)下,选择在源域中托管内容的存储桶。
- 在 Bucket details(存储桶详细信息)页面的 Permissions(权限)下,选择 Edit(编辑)。
- 输入策略,然后选择 Save changes(保存更改)。
- 在 Bucket details(存储桶详细信息)页面的 Objects(对象)下,选择对象。
- 在 Object details(对象详细信息)页面上,记下 S3 URI。例如,s3://your-bucket-name/your_image.png。
- 在新的浏览器标签页中,输入 S3 URI。例如,d2icdkfpjckhwg.cloufront.net/your_image.png。
- 在 Quick Sight 控制面板的 Properties(属性)下,选择 Visual(视觉对象)部分,然后在 URL 字段中输入自定义 URI。
- 选择 Apply(应用)。