使用 AWS Lambda 安排报告
您可以将 AWS Lambda 与 Reporting CLI 工具配合使用,以指定 AWS Lambda 函数来触发报告生成。
这要求您使用 AMD64 系统和 Docker。
先决条件
要将 Reporting CLI 与 AWS Lambda 配合使用,您需要执行以下初步步骤。
- 获取 AWS 账户。有关说明,请参阅 AWS 账户管理参考指南中的创建 AWS 账户。
- 设置 Amazon Elastic Container Registry (ECR)。有关说明,请参阅通过 AWS 管理控制台开始使用 Amazon ECR。
步骤 1:使用 Dockerfile 创建容器镜像
您需要通过运行 Dockerfile 来组装容器镜像。运行 Dockerfile 时,它会下载使用 Reporting CLI 所需的 OpenSearch 工件。要了解有关 Dockerfile 的更多信息,请参阅Dockerfile 参考。
将以下示例配置复制到 Dockerfile 中
# Define function directory
ARG FUNCTION_DIR="/function"
# Base image of the docker container
FROM node:lts-slim as build-image
# Include global arg in this stage of the build
ARG FUNCTION_DIR
# AWS Lambda runtime dependencies
RUN apt-get update && \
apt-get install -y \
g++ \
make \
unzip \
libcurl4-openssl-dev \
autoconf \
automake \
libtool \
cmake \
python3 \
libkrb5-dev \
curl
# Copy function code
WORKDIR ${FUNCTION_DIR}
RUN npm install @opensearch-project/reporting-cli && npm install aws-lambda-ric
# Build Stage 2: Copy Build Stage 1 files in to Stage 2. Install chrome, then remove chrome to keep the dependencies.
FROM node:lts-slim
# Include global arg in this stage of the build
ARG FUNCTION_DIR
# Set working directory to function root directory
WORKDIR ${FUNCTION_DIR}
# Copy in the build image dependencies
COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}
# Install latest chrome dev package and fonts to support major char sets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others)
# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer installs, work.
RUN apt-get update \
&& apt-get install -y wget gnupg \
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
--no-install-recommends \
&& apt-get remove -y google-chrome-stable \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"]
ENV HOME="/tmp"
CMD [ "/function/node_modules/@opensearch-project/reporting-cli/src/index.handler" ]
接下来,在包含 Dockerfile 的同一目录中运行以下构建命令
docker build -t opensearch-reporting-cli .
步骤 2:使用 Amazon ECR 创建私有存储库
您需要按照说明创建镜像存储库,请参阅通过 AWS 管理控制台开始使用 Amazon ECR。
将您的存储库命名为 opensearch-reporting-cli
。
除了 Amazon ECR 说明外,您还需要对 Reporting CLI 进行一些调整,以使其在此过程的后续步骤中正常运行。
步骤 3:将镜像推送到私有存储库
您需要从 AWS ECR 控制台获取几个命令,以便在 Dockerfile 目录中运行。
- 创建存储库后,从“**私有存储库**”中选择它。
- 选择“**查看推送命令**”。
- 在 Dockerfile 目录中,按顺序复制并运行“**opensearch-reporting-cli 的推送命令**”中显示的每个命令。
有关 Docker 推送命令的更多详细信息,请参阅 Amazon ECR 用户指南中的推送 Docker 镜像。
步骤 4:使用容器镜像创建 Lambda 函数
现在您已经为 Reporting CLI 创建了容器镜像,您需要创建一个定义为容器镜像的函数。
- 打开 AWS Lambda 控制台并选择函数。
- 选择“**创建函数**”,然后选择“**容器镜像**”并填写函数名称。
- 在“**容器镜像 URI**”中,选择“**浏览镜像**”并选择
opensearch-reporting-cli
作为镜像存储库。 - 在“**镜像**”中选择镜像,然后选择“**选择镜像**”。
- 在“**架构**”中,选择“**x86_64**”。
- 选择“**创建函数**”。
- 转到“**Lambda**”>“**函数**”,然后选择您创建的函数。
- 选择“**配置 > 一般配置 > 编辑超时**”,并将 lambda 中的超时设置为 5 分钟,以允许 Reporting CLI 生成报告。
-
将“**临时存储**”设置更改为至少 1024MB。默认设置不足以支持报告生成。
- 接下来,通过提供 JSON 格式的值或提供 AWS Lambda 环境变量来测试该函数。
- 如果函数包含固定值(例如电子邮件地址),则不需要 JSON 文件。您可以在 AWS Lambda 中指定环境变量。
- 如果函数采用可变键值对,则需要使用与命令选项相同的命名约定在 JSON 中指定值,例如
--credentials
选项需要用户名和密码。
以下示例显示了为发件人和收件人电子邮件地址提供的固定值
{
"url": "https://playground.opensearch.org/app/dashboards#/view/084aed50-6f48-11ed-a3d5-1ddbf0afc873",
"transport": "ses",
"from": "sender@amazon.com",
"to": "recipient@amazon.com",
"subject": "Test lambda docker image"
}
要了解有关 AWS Lambda 函数的更多信息,请参阅 AWS Lambda 文档中的将 Lambda 函数部署为容器镜像。
步骤 5:添加触发器以启动 AWS Lambda 函数
设置触发器以开始运行报告。AWS Lambda 可以使用任何 AWS 服务作为触发器,例如 SNS、S3 或 AWS CloudWatch EventBridge。
- 在“**触发器**”部分,选择“**添加触发器**”。
- 从列表中选择一个触发器。例如,您可以设置 AWS CloudWatch 事件。要了解有关可以安排的 Amazon ECR 事件的更多信息,请参阅来自 Amazon ECR 的示例事件。
- 选择“**测试**”以启动函数。
(可选)步骤 6:添加 Amazon SES 的角色权限
如果您想使用 Amazon SES 进行电子邮件传输,则需要设置权限。
- 选择“**配置**”并选择“**执行角色**”。
- 在“**摘要**”中,选择“**权限**”。
- 选择“**{}JSON**”以打开 JSON 策略编辑器。
- 为您要使用的 Amazon SES 资源添加权限。
以下示例提供了发送电子邮件操作的资源 ARN
{
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource": "arn:aws:ses:us-west-2:555555511111:identity/username@amazon.com"
}
要了解有关设置角色权限的更多信息,请参阅 AWS Lambda 用户指南中的权限。