[Onboarding] 4주차 - AWS CLI

이준석·2023년 12월 26일
0

Onboarding

목록 보기
4/4

Console에서 S3 생성




Access Key 발급




새 profile 등록

aws configure




S3 리스트 불러오기

aws s3 ls
  • 트러블 발생
  • MFA 설정으로 인해 Access Key만으로는 안되는 것으로 판단
  • configure에 mfa 관련 설정도 해줘야함
aws sts get-session-token --profile ljs --duration-seconds 129600 --serial-number arn:aws:iam::xxxxxxx:mfa/DevOps3 --token-code xxxxxx

aws configure set aws_access_key_id 위 명령어의 output
aws configure set aws_secret_access_key 위 명령어의 output
aws configure set aws_session_token 위 명령어의 output
aws s3 ls




log 파일을 s3에 업로드 및 삭제

  • 업로드

    aws s3 cp /home/log/test.log s3://ljs-bucket/logs/

  • 삭제

    aws s3 rm s3://ljs-bucket/logs/test.log

log 파일을 s3에 업로드하는 스크립트 작성

vi pandas_test.sh
#!/bin/bash

docker exec js-jenkins /bin/bash -c \
  "{ echo;  echo -n 'Time = ' && date '+%Y-%m-%d %H:%M:%S'; } && \
  source /opt/conda/etc/profile.d/conda.sh && \
  conda activate test && \
  python /pandas_test.py" >> /home/log/test.log

echo 'Results saved successfully.'
ubuntu@ip-172-31-30-216:~/onboarding-jenkins$ vi panads_test.sh
ubuntu@ip-172-31-30-216:~/onboarding-jenkins$ ./panads_test.sh
Results saved successfully.
upload: ../../log/test.log to s3://ljs-bucket/logs/test.log
ubuntu@ip-172-31-30-216:~/onboarding-jenkins$ cat panads_test.sh
#!/bin/bash

docker exec js-jenkins /bin/bash -c \
  "{ echo;  echo -n 'Time = ' && date '+%Y-%m-%d %H:%M:%S'; } && \
  source /opt/conda/etc/profile.d/conda.sh && \
  conda activate test && \
  python /pandas_test.py" >> /home/log/test.log

echo 'Results saved successfully.'

aws s3 cp /home/log/test.log s3://ljs-bucket/logs/
./pandas_test.sh




Python을 이용해서 s3 업로드

aws cli를 사용하기 위한 모듈 설치

conda activate test

pip install boto3

스크립트에 s3 업로드 부분 추가

vi select_mysql.py
import pymysql
import pandas as pd
import boto3
from botocore.exceptions import NoCredentialsError

connection = pymysql.connect(
    host='[EC2 Public IP]',
    user='root',
    password='[비밀번호]',
    database='testdb'
)

cursor = connection.cursor()
cursor.execute("select * from test")
result = cursor.fetchall()
cursor.close()
connection.close()

df = pd.DataFrame(result, columns=['name', 'birthday', 'occupation'])

csv_path = '/home/test_result.csv'
df.to_csv(csv_path, index=False)

aws_profile = 'ljs'
bucket_name = 'ljs-bucket'
s3_folder = 'csv'

session = boto3.Session(profile_name=aws_profile)
s3 = session.client('s3')

try:
    s3.upload_file(csv_path, bucket_name, f'{s3_folder}/test_result.csv')
    print(f"CSV 파일이 성공적으로 S3로 업로드되었습니다.")
except FileNotFoundError:
    print("파일이 발견되지 않습니다.")
except NoCredentialsError:
    print("AWS 자격 증명이 올바르지 않습니다.")
except Exception as e:
    print(f"오류 발생: {e}")

s3에 업로드

python select_mysql.py




RDS의 MySQL과 연동

  • 앞선 3주차에서 MySQL을 컨테이너로 실행 한 후 진행
  • 4주차에서는 MySQL을 RDS로 변경

RDS 생성 (MySQL)

  • 트러블 발생
    • 확인차 aws s3 ls 명령어를 실행했는데, token이 만료됐다는 에러 발생
    • 토큰을 새로 발급 받으려니 이런 오류가 발생
    • 기존의 ~/.aws/credentials의 token 값을 지우고 새로 발급하니 해결

  • 새로운 토큰을 ljs 프로파일에 추가해주니 정상적으로 S3 리스트가 나옴



앞서 생성한 RDS(MySQL)에 데이터베이스 및 테이블 추가




RDS(MySQL)의 테이블 조회 결과를 S3에 업로드

  • select_mysql.py 스크립트 수정, RDS 엔드포인트로 연결

    import pymysql
    import pandas as pd
    import boto3
    from botocore.exceptions import NoCredentialsError
    
    connection = pymysql.connect(
       host='[RDS의 엔드포인트]',
       user='admin',
       password='[비밀번호]',
       database='testdb'
    )
    
    cursor = connection.cursor()
    cursor.execute("select * from test")
    result = cursor.fetchall()
    cursor.close()
    connection.close()
    
    df = pd.DataFrame(result, columns=['name', 'birthday', 'occupation'])
    
    csv_path = '/home/test_result.csv'
    df.to_csv(csv_path, index=False)
    
    aws_profile = 'ljs'
    bucket_name = 'ljs-bucket'
    s3_folder = 'csv'
    
    session = boto3.Session(profile_name=aws_profile)
    s3 = session.client('s3')
    
    try:
       s3.upload_file(csv_path, bucket_name, f'{s3_folder}/test_result.csv')
       print(f"CSV 파일이 성공적으로 S3로 업로드되었습니다.")
    except FileNotFoundError:
       print("파일이 발견되지 않습니다.")
    except NoCredentialsError:
       print("AWS 자격 증명이 올바르지 않습니다.")
    except Exception as e:
       print(f"오류 발생: {e}")

결과 확인

  • 현재 시각에 정상적으로 올라온 것을 확인

0개의 댓글