AWS Infra 36

[ AWS ] Python boto3를 이용하여 ElastiCache Database 메모리 사용량 확인

from datetime import datetime from datetime import timedelta import boto3 cloudwatch = boto3.client('cloudwatch') def elastiCache_Database_Memory(): # 샘플 2023년 5월 1일 데이터 st = datetime(2023,5,1,0,0,0) - timedelta(hours=9) et = st + timedelta(days=1) response = cloudwatch.get_metric_statistics( Namespace='AWS/ElastiCache', MetricName='DatabaseMemoryUsagePercentage', Dimensions=[ { 'Name': 'CacheCl..

AWS Infra 2023.05.31

[ AWS ] Python boto3를 이용한 S3에 저장된 CSV 파일 읽기 / 쓰기

CSV파일 S3에 다이렉트 저장하기 Sample : Pandas DataFrame ( 24 X 5 ) from io import StringIO import boto3 s3 = boto3.client('s3') bucket = 'string' # Put Bucket Name csv_buffer = StringIO() df.to_csv(csv_buffer) s3.put_object(Bucket=bucket, Body=csv_buffer.getvalue(), Key='df.csv') S3에 저장되어 있는 CSV파일 다이렉트 읽기 import boto3 import pandas as pd import io s3 = boto3.client('s3') bucket = 'string' obj = s3.get_obj..

AWS Infra 2023.05.23

[ AWS ] Python boto3를 이용한 EC2 Instance 정보 구하기

Python Boto3를 이용하여 EC2의 정보를 구해보자. ISMS 등 자산관리 및 EC2의 기본적인 모니터링을 할 때도 유용하게 사용할 수 있다. import boto3 ec2 = boto3.client('ec2') def ec2_info_func(): ec2_info = {} response = ec2.describe_instances() for reservation in response["Reservations"]: for i in reservation["Instances"]: for j in i['Tags']: # tagName이 없으면 'None' tagName = 'None' if j['Key'] == 'Name': tagName = j['Value'] ec2_info[i["InstanceI..

AWS Infra 2023.05.22

[ AWS ] Python boto3를 이용하여 WAF IPset IP 수정하기

Python Boto3를 이용한 WAF IPset에 IP Address 추가 * 하나의 IP를 추가/삭제는 않되기 때문에, 기존 IP 리스트를 가져와서 수정하는 것 import boto3 client = boto3.client('wafv2') ipsetName = 'string' ipsetId = 'string' ipAddress = 'x.x.x./32' def wafv2_update_ip_set(n,i,a): # ip가 포함되어 있는지 get_ip_set으로 확인 response = client.get_ip_set( Name=n, Scope='REGIONAL', Id=i) if a in response['IPSet']['Addresses']: return 'exist ipaddress' else: # ..

AWS Infra 2023.05.16

[ AWS ] Python boto3를 이용하여 RDS Connections 데이터 추출 하기

import boto3 from datetime import datetime from datetime import timedelta cloudwatch = boto3.client('cloudwatch') def rds_connections(): StartTime = datetime(2023,5,1) - timedelta(hours=9) # 한국시간에 맞게 -0900 # 한국기준으로 5월 1일로 지정해줬기 때문에, UTC는 4월 30일 15시 데이터 추출한다. EndTime = StartTime + timedelta(days=1) response = cloudwatch.get_metric_statistics( Namespace='AWS/RDS', MetricName='DatabaseConnections',..

AWS Infra 2023.05.11

[ AWS ] Python boto3를 이용하여 ELB Metric 모니터링

Python Boto3를 이용하여 ELB 2XX Count 통계를 추출해보고, 효율적으로 모니터링해보자. 메소드는 cloudwatch.get_metric_statistics이용하고, MetricName은 HTTPCode_Target_2XX_Count 을 사용하면 된다. ELB 콘솔 cloudwatch에서도 아래지표와 같이 볼 수 있는데, 이 데이터를 Python으로 추출해보자 from datetime import datetime from datetime import timedelta cloudwatch = boto3.client('cloudwatch') elb = 'string' # elb의 arn의 app이하 부분부터 넣어주면 된다. def elb_2XX_Count(elb): response = clo..

AWS Infra 2023.05.10

[ AWS ] Python boto3를 이용하여 Target Group Health 모니터링

import boto3 client = boto3.client('elbv2') response = client.describe_target_health( TargetGroupArn='string' ) for i in response['TargetHealthDescriptions']: print(i['TargetHealth']['State']) ----------------------------------------------- healthy . 비정상일 경우 : 'unhealthy', 'unused' print(i['TargetHealth']['State'],i['TargetHealth']['Description']) ------------------------------------------------..

AWS Infra 2023.04.25

[ AWS ] Python boto3를 이용하여 s3 log 압축파일(gz) DataFrame 만들기 - CloudFront Logs

AWS CloudFront, WAF 등 S3에 저장된 log들은 최종 gz 압축 형태로 보관 된다. ​ 주기적이고, 빠르게 모니터링하고 분석하기 위해서 Python SDK를 이용하여 자동화 할 수 있는 방법을 알아본다. S3 버킷에 저장된 object 다운로드 Python boto3를 이용하여 S3에서 파일을 다운로드 한다. 일반적으로 날짜 Prefix가 들어가기 때문에 datetime 모듈을 이용하여 일괄 다운로드 받을 수 있으며, 아래에서는 단일 파일만 대상으로 테스트 해본다. ​ CloudFront 로그가 S3에 저장되어 있고, xxxx.2023-03-15-01.xxxx.gz 라는 압축파일을 다운로드 import boto3 client = boto3.client('s3') saveFile = 'xx..

AWS Infra 2023.03.16

[ Python ] Python을 이용한 ElastiCache Redis Hash Data Export & Import

ElasiCache Redis를 운영하면서 "noeviction" 데이터 보관용으로 운영하면서 주기적으로 데이터를 Export 해야할 필요가 생겼다. 데이터에 접근할 있어, 분석이나 재처리 업무시 사용할 수 있고, 2차 백업용으로도 사용할 수 있겠다. Sample Hash Data Export to Json File import redis import json # 접속옵션으로 decode_responses=True 사용할 경우, decode를 않해도 된다. rd = redis.StrictRedis(host='localhost', port=6379, db=0) allhash = [ x.decode() for x in rd.scan_iter('*') ] redisdct = {} for h in allhash..

AWS Infra 2023.02.28