Skip to content

Files

Latest commit

395feb6 · Mar 29, 2025

History

History
334 lines (239 loc) · 11.7 KB

deployment.md

File metadata and controls

334 lines (239 loc) · 11.7 KB

인프라 설치하기

Bedrock 사용 권한 설정하기

여기에서는 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"이 사용 가능하여야 합니다.

설치하기

EC2를 사용하여 설치 환경 구성하기

배포 편의상 us-west-2 (Oregon) 리전에서 EC2를 아래와 같이 준비합니다.

EC2 생성

EC2 - Launch an Instance에 접속하여 Name으로 "chatbot"이라고 입력합니다.

image

OS로 기본값인 "Amazon Linux"를 유지하고, Amazon Machine Image (AMI)도 기본값을 그대로 사용합니다.

Instance Type은 "m5.large"를 선택하고, Key pair는 "Proceeding without a key pair"를 선택합니다.

[Configure storage]는 편의상 80G로 변경하고 [Launch instance]를 선택하여 EC2를 설치합니다.

image

이후 아래와 같이 instance를 선택하여 EC2 instance 화면으로 이동하거나, console에서 EC-Instances로 접속합니다.

image

아래와 같이 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

소스 다운로드 및 설치

  1. 소스를 다운로드합니다.
git clone https://github.com/kyopark2014/bedrock-agent
  1. cdk 폴더로 이동하여 필요한 라이브러리를 설치합니다.
cd bedrock-agent/cdk-bedrock-agent/ && npm install
  1. 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
  1. 아래 명령어로 인프라를 설치합니다.
cdk deploy --require-approval never --all

인프라가 설치가 되면 아래와 같은 Output을 확인할 수 있습니다.

noname

  1. 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를 입력합니다.

  1. 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을 입력합니다.

noname

  1. Output의 albUrlforlanggraphnova을 이용하여 아래와 같이 접속합니다. 처음 접속시에는 Knowledge base 생성등의 초기화를 하므로 수초에서 수십초 정도 기다릴 수 있습니다.

noname

이때 실행된 결과는 아래와 같습니다.

image

실행환경 (선택)

CloudWatch Log 활용하기

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

Local에서 실행하기

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에서 로그를 보면서 실행하기

개발 및 검증을 위해서는 로그를 같이 보면서 실행하는것이 필요합니다. 로컬 환경에서도 충분히 테스트 가능하지만 다른 인프라와 연동이 필요할 경우에 때로는 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 관련 중요한 명령어들

  • 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"