- Notifications
You must be signed in to change notification settings - Fork 50
调试界面以及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: amazon@amazon.com 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: - amazon@amazon.com
将您的账号信息以及需要部署的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: amazon@amazon.com 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: - amazon@amazon.com
由于需要使用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