-
Notifications
You must be signed in to change notification settings - Fork 47
调试界面以及API部署
目前该CDK版本,可以部署调试界面,终端用户界面以及OpenSearch服务
进行CDK安装需要依赖python,pip和npm环境。您可以使用可联网的本地开发环境或者Amazon EC2环境。本文以操作系统Amazon Linux 2023为例进行说明, 请登陆AWS console进入us-east-1, 并进入EC2 Instance的管理界面,如下:
点击Launch Instances, 输入EC2实例的名称,例如GenBI_installer,点击Browse more AMIs:
操作系统默认选择Amazon Linux 2023 AMI
在Instance type选项,选择实例t3.large,如下图
点击Create new key pair并保存以便后续SSH登陆使用,例如GenBI_installer.pem
存储空间默认设定20g,安全组保持默认:
点击Advanced details,在IAM instance profile,点击create new IAM profile:
点击“Create Role”:
选择AWS Serivie以及EC2作为Serivce or Use Case:
选择AdministratorAccess作为Permission Policy:
输入Role Name 为genbi_installer_role, 点击创建“Create Role”:
回到EC2 instance控制台在IAM Instance Profile处选取这个IAM Role "genbi_installer_role"
点击Launch,等待EC2实例初始化和启动,实例启动后,如下图:
使用“ec2-user”用户以及保存的key pair文件(例如GenBI_installer.pem)登录到该EC2实例,进入/home/ec2-user/目录. 该版本通常已经内置python3,先安装pip,git与npm等环境依赖
sudo yum install -y pip git npm docker
然后安装 AWS CDK
sudo npm install -g aws-cdk
npm install aws-cdk-lib
启动docker
sudo yum install docker -y
sudo service docker start
sudo chmod 666 /var/run/docker.sock
下载最新版本代码,执行如下命令:
git clone https://github.com/aws-samples/generative-bi-using-rag
cd generative-bi-using-rag/application && cp .env.template .env
(注:中国区github有可能连接稳定性问题,您也可以将public repo的软件包手动从github下载下来)
配置登录的用户名和密码,部署代码之前,必须设置登录用户名和密码
修改如下文件
application/config_files/stauth_config.yaml
密码需要从明文转换成哈希过之后的密码,可以通过如下方式,获取
pip install streamlit-authenticator~=0.3.2
python3 generate_streamlit_password.py
输入需要转换的密码,就可以得到哈希过之后的密码,将改密码添加到,application/config_files/stauth_config.yaml文件中
please enter the password: abc
hashed_passwords: xxxxxxxxxxxx
将xxxxxxxxxxxx,copy到password这个地方,如果想添加多个用户名,也可以在stauth_config.yaml这个文件进行配置
credentials:
usernames:
admin:
email: [email protected]
failed_login_attempts: 0 # Will be managed automatically
logged_in: False # Will be managed automatically
name: AWS
password: # Set the password following instructions in README
cookie:
expiry_days: 30
key: some_signature_key # Must be string
name: some_cookie_name
pre-authorized:
emails:
- [email protected]
将您的账号信息以及需要部署的Region ID导入到环境变量中,本workshop建议您将智能搜索方案部署在us-east-1:
export AWS_ACCOUNT_ID=XXXXXXXXXXXX
export AWS_REGION=xx-xx-x
cd generative-bi-using-rag/source/resources
cdk bootstrap
cdk deploy GenBiMainStack --require-approval never
部署完成之后,可以得到endpoint的地址
GenBiMainStack.AOSDomainEndpoint = XXXXX.us-east-1.es.amazonaws.com
GenBiMainStack.APIEndpoint = XXXXX.us-east-1.elb.amazonaws.com
GenBiMainStack.FrontendEndpoint = XXXXX.us-east-1.elb.amazonaws.com
GenBiMainStack.StreamlitEndpoint = XXXXX.us-east-1.elb.amazonaws.com
GenBiMainStack.StreamlitEndpoint 这个页面是系统的调试页面
GenBiMainStack.FrontendEndpoint 这个页面是针对普通用户的界面
如果上一步,CDK部署失败,可以尝试手动部署调试界面
本文架构图中使用ECS服务,在手动部署服务之前,需要先创建一个ECR仓库
编译镜像,您可以使用可联网的本地开发环境或者Amazon EC2环境。
本文以操作系统Amazon Linux 2023为例进行说明, 请登陆AWS console进入us-west-2(默认选择本区域), 并进入EC2 Instance的管理界面,然后以ec2-user用户登录
sudo su - ec2-user
# 对于组件
sudo yum install docker python3-pip git -y
# 安装aws cli
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
sudo ln -s /usr/local/bin/aws /usr/bin/aws
# 安装docker-compose
sudo pip3 install --ignore-installed docker-compose
# 修复docker的python包装器7.0 SSL版本问题
pip3 install docker==6.1.3
# 修复requests版本升级导致的问题
pip3 install requests==2.31.0
# 配置组件
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER
# 刷新当前用户的组成员身份
newgrp docker
然后下载代码
# 克隆代码
git clone https://github.com/aws-samples/generative-bi-using-rag.git
# 在.env文件里配置环境变量
cd generative-bi-using-rag/application && cp .env.template .env
配置登录的用户名和密码,部署代码之前,必须设置登录用户名和密码
修改如下文件
application/config_files/stauth_config.yaml
密码需要从明文转换成哈希过之后的密码,可以通过如下方式,获取
pip install streamlit-authenticator~=0.3.2
python3 generate_streamlit_password.py
输入需要转换的密码,就可以得到哈希过之后的密码,将改密码添加到,application/config_files/stauth_config.yaml文件中
please enter the password: abc
hashed_passwords: xxxxxxxxxxxx
将xxxxxxxxxxxx,copy到password这个地方,如果想添加多个用户名,也可以在stauth_config.yaml这个文件进行配置
credentials:
usernames:
admin:
email: [email protected]
failed_login_attempts: 0 # Will be managed automatically
logged_in: False # Will be managed automatically
name: AWS
password: # Set the password following instructions in README
cookie:
expiry_days: 30
key: some_signature_key # Must be string
name: some_cookie_name
pre-authorized:
emails:
- [email protected]
由于需要使用OpenSearch进行向量检索,所以需要创建OpenSearch实例,POC建议使用m5.large.search,生产环境,建议使用r6g.2xlarge.search
创建完成之后,需要将host、用户名、密码一起上传到AWS Secrets Manager中
具体示例如下
密钥名称
-
opensearch-host-url
-
密钥键值
-
密钥键:host,密钥值:search-xxxx-xxxxx.aos.us-west-2.on.aws(不带http)
-
密钥名称
- opensearch-master-user
-
密钥键值
- 密钥键:username,密钥值,xxxx
- 密钥键:password,密钥值,xxxx
确保您已在us-west-2(美国西部(俄勒冈州))区域的AWS控制台中为Anthropic Claude模型和Amazon Titan嵌入模型启用了模型访问。
BedRock的访问,可以使用IAM Role或者AK/SK两种方式进行访问
- IAM 方式
需要在ECR任务执行的时候,添加IAM Role,IAM Role的示例如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dynamodb:*Item",
"dynamodb:*Table",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:us-west-2:**YOURACCOUNTID*:table/*",
"Effect": "Allow"
},
{
"Action": "secretsmanager:GetSecretValue",
"Resource": [
"arn:aws:secretsmanager:us-west-2:**YOURACCOUNTID*:secret:*"
],
"Effect": "Allow"
},
{
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": "arn:aws:bedrock:us-west-2:**YOURACCOUNTID*:foundation-model/*",
"Effect": "Allow"
},
{
"Action": [
"cognito-identity:*",
"cognito-idp:*"
],
"Resource": [
"arn:aws:cognito-identity:us-west-2:**YOURACCOUNTID*:identitypool/*",
"arn:aws:cognito-idp:us-west-2:**YOURACCOUNTID*:userpool/*"
],
"Effect": "Allow"
}
]
}
国内用户权限
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"dynamodb:*Table",
"dynamodb:*Item",
"dynamodb:Scan",
"dynamodb:Query"
],
"Resource": "arn:aws-cn:dynamodb:cn-north-1:**YOURACCOUNTID**:table/Nlq*"
},
{
"Sid": "SecretsManagerAccess",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": "arn:aws-cn:secretsmanager:cn-north-1:**YOURACCOUNTID**:secret:*"
}
]
}
- OpenSearch配置
OPENSEARCH_TYPE=service # 设置OpenSearch类型
AOS_AWS_REGION=us-west-2 # 设置OpenSearch region
AOS_INDEX=uba # 设置索引名称
AOS_INDEX_NER=uba_ner # 设置索引名称
AOS_INDEX_AGENT=uba_agent # 设置索引名称
- Embedding设置
需要设置Embedding的模型名称和维度值
EMBEDDING_DIMENSION=1536
BEDROCK_EMBEDDING_MODEL=amazon.titan-embed-text-v1
- AWS region配置
BEDROCK_REGION=us-west-2
RDS_REGION_NAME=us-west-2
AWS_DEFAULT_REGION=us-west-2
DYNAMODB_AWS_REGION=us-west-2
- 密钥配置
如果使用AK/SK访问BedRock,需要提前存储好AK/SK,到AWS Secrets Manager中
如果使用IAM Role,请删除BEDROCK_SECRETS_AK_SK变量
# leave blank if you use default ak/sk profile. Other wise provide the profile name for profile used for bedrock
BEDROCK_SECRETS_AK_SK=bedrock-ak-sk
OPENSEARCH_SECRETS_URL_HOST=opensearch-host-url
OPENSEARCH_SECRETS_USERNAME_PASSWORD=opensearch-master-user
整理之后的配置文件如下:
OPENSEARCH_TYPE=service
AOS_AWS_REGION=us-west-2
AOS_INDEX=uba
AOS_INDEX_NER=uba_ner
AOS_INDEX_AGENT=uba_agent
BEDROCK_REGION=us-west-2
RDS_REGION_NAME=us-west-2
AWS_DEFAULT_REGION=us-west-2
DYNAMODB_AWS_REGION=us-west-2
EMBEDDING_DIMENSION=1536
BEDROCK_EMBEDDING_MODEL=amazon.titan-embed-text-v1
# If you need to use ak/sk to access bedrock, please configure bedrock's ak/sk to Secrets Manager, Examples are as follows
# BEDROCK_SECRETS_AK_SK=bedrock-ak-sk
BEDROCK_SECRETS_AK_SK=
OPENSEARCH_SECRETS_URL_HOST=opensearch-host-url
OPENSEARCH_SECRETS_USERNAME_PASSWORD=opensearch-master-user
将上述的配置,存放到.env中
我们已经创建了ECR仓库,然后可以查看推送命令
进行第2步,打包镜像的时候,需要使用下面的命令进行替换
platform根据目标运行平台选择 不写默认会遵从构建机的平台
# run on linux ec2/lambda/ecs(amd64)
# docker buildx build --platform linux/amd64 --network host -t genbi-deploy .
最后将镜像推动到ECR中

其中,Infrastructure 类型建议选择AWS Fargate (serverless)


Task roles 的时候,我们需要添加相关的Role权限

我们可以在IAM中创建一个新的Role

相关的权限如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dynamodb:*Item",
"dynamodb:*Table",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:us-west-2:**YOURACCOUNTID*:table/*",
"Effect": "Allow"
},
{
"Action": "secretsmanager:GetSecretValue",
"Resource": [
"arn:aws:secretsmanager:us-west-2:**YOURACCOUNTID*:secret:*"
],
"Effect": "Allow"
},
{
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": "arn:aws:bedrock:us-west-2:**YOURACCOUNTID*:foundation-model/*",
"Effect": "Allow"
},
{
"Action": [
"cognito-identity:*",
"cognito-idp:*"
],
"Resource": [
"arn:aws:cognito-identity:us-west-2:**YOURACCOUNTID*:identitypool/*",
"arn:aws:cognito-idp:us-west-2:**YOURACCOUNTID*:userpool/*"
],
"Effect": "Allow"
}
]
}
Image URL 从ECR中copy得到

创建任务完成

在导航窗格中,选择集群。在 Services(服务)选项卡上,选择 Create(创建)。在 Deployment configuration(部署配置)下,指定应用程序的部署方式。
- 在 Task Definitions(任务定义)中,选择您在上一步骤中创建的任务定义。
- 对于 Service name(服务名称),为您的服务输入一个名称。
- 对于 Desired tasks(所需任务),选择最新的版本


安全组可以重新创建,开放80和8501端口

Services创建完成

最后可以页面地址

在浏览器中打开网址: http://your-ecs-public-ip:8501
注意:使用 HTTP 而不是 HTTPS。
输入设置的用户名和密码
username: admin password:
需要用户准备好数据库链接,RDS MySQL,Amazon Redshift,PostgreSQL