여기에서는 us-west-2, us-east-1, us-east-2 리전을 사용합니다. Model access에 접속해서 [Edit]를 선택하여 Amazon과 Anthropic의 모든 model들의 사용 권한을 획득합니다. 특히, "Titan Text Embeddings V2", "Nova Pro", "Nova Lite", "Nova Micro", "Claude 3.5 Haiku", "Claude 3.5 Sonnet V2", "Claude 3.5 Sonnet", "Claude 3 Sonnet"이 사용 가능하여야 합니다.
배포 편의상 us-west-2 (Oregon) 리전에서 EC2를 아래와 같이 준비합니다.
EC2 - Launch an Instance에 접속하여 Name으로 "chatbot"이라고 입력합니다.
OS로 기본값인 "Amazon Linux"를 유지하고, Amazon Machine Image (AMI)도 기본값을 그대로 사용합니다.
Instance Type은 "m5.large"를 선택하고, Key pair는 "Proceeding without a key pair"를 선택합니다.
[Configure storage]는 편의상 80G로 변경하고 [Launch instance]를 선택하여 EC2를 설치합니다.
이후 아래와 같이 instance를 선택하여 EC2 instance 화면으로 이동하거나, console에서 EC-Instances로 접속합니다.
아래와 같이 instance에서 [Connect]를 선택하여 [Session Manager]로 접속합니다.
필요한 패키지로 git, node.js, npm, docker를 설치하고 환경을 설정합니다.
cd && sudo yum install git nodejs npm docker -y
sudo usermod -a -G docker ec2-user
sudo newgrp docker
sudo service docker start
sudo npm install -g aws-cdk --prefix /usr/local
만약 AWS CLI가 설치되지 않은 경우라면 아래 명령어로 설치합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
- 소스를 다운로드합니다.
git clone https://github.com/kyopark2014/bedrock-agent
- cdk 폴더로 이동하여 필요한 라이브러리를 설치합니다.
cd bedrock-agent/cdk-bedrock-agent/ && npm install
- CDK 사용을 위해 Boostraping을 수행합니다.
아래 명령어로 Account ID를 확인합니다.
aws sts get-caller-identity --query Account --output text
아래와 같이 bootstrap을 수행합니다. 여기서 "account-id"는 상기 명령어로 확인한 12자리의 Account ID입니다. bootstrap 1회만 수행하면 되므로, 기존에 cdk를 사용하고 있었다면 bootstrap은 건너뛰어도 됩니다.
cdk bootstrap aws://[account-id]/us-west-2
만약 AWS CLI가 설치가 안되어서 bootstrap이 실패하는 경우에는 아래 명령어로 설치합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
- 아래 명령어로 인프라를 설치합니다.
cdk deploy --require-approval never --all
인프라가 설치가 되면 아래와 같은 Output을 확인할 수 있습니다.
- Console-SecretManage에서 생성한 API에 대한 Credential을 입력합니다.
검색, 날씨, 로그 분석을 위해 외부와 같은 API에 대한 credential을 발급받아서 입력합니다.
- 일반 검색을 위하여 Tavily Search에 접속하여 가입 후 API Key를 발급합니다. 이것은 tvly-로 시작합니다.
- 날씨 검색을 위하여 openweathermap에 접속하여 API Key를 발급합니다.
- langsmith.md를 참조하여 LangSmith에 가입후 API Key를 발급 받습니다.
Secret manager에 접속하여, openweathermap-bedrock-agent, tavilyapikey-bedrock-agent, langsmithapikey-bedrock-agent에 접속하여, [Retrieve secret value]를 선택 후, api key를 입력합니다.
- OpenSearch가 사용하는 AWS Credential을 입력하기 위해, Console-EC2에서 "app-for-agentic-rag"을 선택한 후에 [Connect]를 선택합니다. 여러가지 옵션 중에서 Session Manager를 선택한 후에 [connect]를 접속한 후에 console로 접속합니다. 아래 명령어를 이용하여 ec2-user에 AWS Credential을 입력합니다.
sudo runuser -l ec2-user -c 'aws configure'
AWS Credential을 입력합니다.
- Output의 albUrlforlanggraphnova을 이용하여 아래와 같이 접속합니다. 처음 접속시에는 Knowledge base 생성등의 초기화를 하므로 수초에서 수십초 정도 기다릴 수 있습니다.
이때 실행된 결과는 아래와 같습니다.
Streamlit이 설치된 EC2에 접속해서 아래 명령어로 config를 생성합니다.
cat << EOF > /tmp/config.json
{
"agent":{
"metrics_collection_interval":60,
"debug":false
},
"metrics": {
"namespace": "CloudWatch/AgenticRAGMetrics",
"metrics_collected":{
"cpu":{
"resources":[
"*"
],
"measurement":[
{
"name":"cpu_usage_idle",
"rename":"CPU_USAGE_IDLE",
"unit":"Percent"
},
{
"name":"cpu_usage_nice",
"unit":"Percent"
},
"cpu_usage_guest"
],
"totalcpu":false,
"metrics_collection_interval":10
},
"mem":{
"measurement":[
"mem_used",
"mem_cached",
"mem_total"
],
"metrics_collection_interval":1
},
"processes":{
"measurement":[
"running",
"sleeping",
"dead"
]
}
},
"append_dimensions":{
"InstanceId":"\${aws:InstanceId}",
"ImageId":"\${aws:ImageId}",
"InstanceType":"\${aws:InstanceType}",
"AutoScalingGroupName":"\${aws:AutoScalingGroupName}"
}
},
"logs":{
"logs_collected":{
"files":{
"collect_list":[
{
"file_path":"/var/log/application/logs.log",
"log_group_name":"agentic-rag.log",
"log_stream_name":"agentic-rag.log",
"timezone":"UTC"
}
]
}
}
}
}
EOF
이후 아래 명령어로 amazon-cloudwatch-agent의 환경을 업데이트하면 자동으로 실행이 됩니다.
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/tmp/config.json
만약 정상적으로 동작하지 않는다면 아래 명령어로 상태를 확인합니다.
amazon-cloudwatch-agent-ctl -m ec2 -a status
systemctl status amazon-cloudwatch-agent
ps -ef|grep amazon-cloudwatch-agent
문제 발생시 로그 확인하는 방법입니다.
cat /opt/aws/amazon-cloudwatch-agent/logs/configuration-validation.log
cat /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
만약 CloudWatch Agent가 설치되지 않은 instance일 경우에는 아래 명령어로 설치합니다.
sudo yum install amazon-cloudwatch-agent
Output의 environmentforagenticrag의 내용을 복사하여 application/config.json을 생성합니다. "aws configure"로 credential이 설정되어 있어야합니다.
만약 visual studio code 사용자라면 config.json 파일은 아래 명령어를 사용합니다.
code application/config.json
아래와 같이 필요한 패키지를 설치합니다.
python3 -m venv venv
source venv/bin/activate
pip install streamlit streamlit_chat
pip install boto3 langchain_aws langchain langchain_community langgraph opensearch-py
pip install beautifulsoup4 pytz tavily-python
아래와 같은 명령어로 streamlit을 실행합니다.
streamlit run application/app.py
개발 및 검증을 위해서는 로그를 같이 보면서 실행하는것이 필요합니다. 로컬 환경에서도 충분히 테스트 가능하지만 다른 인프라와 연동이 필요할 경우에 때로는 EC2에서 실행하면서 로그를 볼 필요가 있습니다.
아래의 명령어로 실행중인 streamlit을 중지시키고, session manager에서 streamlit을 실행합니다.
sudo systemctl stop streamlit
sudo runuser -l ec2-user -c "/home/ec2-user/.local/bin/streamlit run /home/ec2-user/agentic-rag/application/app.py"
이때, ec2-user의 github 코드를 업데이트하는 명령어는 아래와 같습니다.
sudo runuser -l ec2-user -c 'cd /home/ec2-user/agentic-rag && git pull'
- Streamlit 재실행 및 상태 확인 명령어는 아래와 같습니다.
sudo systemctl stop streamlit
sudo systemctl start streamlit
sudo systemctl status streamlit -l
- Streamlit의 환경설정 내용 확인하는 경우에는 아래 명령어를 활용합니다.
sudo runuser -l ec2-user -c "/home/ec2-user/.local/bin/streamlit config show"
- Streamlit의 service 설정을 바꾸고 재실행하는 경우에는 아래와 같이 streamlit을 재시작할 필요가 있습니다.
sudo systemctl disable streamlit.service
sudo systemctl enable streamlit.service
sudo systemctl start streamlit
- Steam의 지속 실행을 위해 service로 등록할때 필요한 streamlit.service를 생성합니다.
sudo sh -c "cat <<EOF > /etc/systemd/system/streamlit.service
[Unit]
Description=Streamlit
After=network-online.target
[Service]
User=ec2-user
Group=ec2-user
Restart=always
ExecStart=/home/ec2-user/.local/bin/streamlit run /home/ec2-user/agentic-rag/application/app.py
[Install]
WantedBy=multi-user.target
EOF"
- Streamlit의 포트를 8501에서 8080으로 변경하고 바탕화면을 검정색으로 설정하기 위해 아래와 같이 config.toml을 생성합니다.
runuser -l ec2-user -c "cat <<EOF > /home/ec2-user/.streamlit/config.toml
[server]
port=${targetPort}
[theme]
base="dark"
primaryColor="#fff700"
EOF"