AWS RDS 에서는 CloudWatch 에 포함된 지표 외에 추가적으로 발생하는 현상에 대하여 알람을 제공해 준다

이를 사용하면 RDS를 보다 안전하고 최적의 성능을 유지하여 사용 하는데 도움이 된다

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/rds-cloudwatch-events.sample.html

 

Amazon RDS에 대한 이벤트 개요 - Amazon Relational Database Service

Amazon RDS는 최선의 작업을 기반으로 이벤트를 방출합니다. 알림 이벤트의 순서나 존재 여부에 따라 달라지는 프로그램은 순서가 잘못되거나 누락될 수 있으므로 작성하지 않는 것이 좋습니다.

docs.aws.amazon.com


주로 사용하는 알람 지표

  • DB 재시작
  • DB 종료
  • DB 스토리지 부족
  • 백업 수정
  • 파라미터 변경

전체 지표 

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_Events.Messages.html#USER_Events.Messages.instance

 

Amazon RDS 이벤트 범주 및 이벤트 메시지 - Amazon Relational Database Service

Amazon RDS 이벤트 범주 및 이벤트 메시지 Amazon RDS는 Amazon RDS 콘솔, AWS CLI 또는 API를 사용하여 구독할 수 있는 이벤트 카테고리가 매우 많습니다. DB 클러스터 이벤트 다음 표에는 DB 클러스터가 원본

docs.aws.amazon.com


이벤트 구독 방법

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_Events.Subscribing.html

 

Amazon RDS 이벤트 알림 구독 - Amazon Relational Database Service

Amazon RDS 이벤트 알림 구독 가장 간단한 구독 생성 방법은 RDS 콘솔입니다. CLI 또는 API를 사용하여 이벤트 알림 구독을 생성하려면 먼저 Amazon Simple Notification Service 주제를 만든 후 Amazon SNS 콘솔이

docs.aws.amazon.com

 

 

'AWS' 카테고리의 다른 글

Docker Oracle 계정 생성 및 DBeaver 접속 확인  (0) 2024.07.14
Docker Oracle Image Build  (3) 2024.07.14
EKS fargate 생성을 위한 설정  (0) 2023.12.18
AWS EC2 종료 Lambda with EventBridge  (0) 2023.11.28
AWS EKS LB Controller Install  (0) 2023.09.29

 

AWS EKS 에서 fargate 를 사용하기 위해서는 몇가지의 설정이 필요하다

 

1. faragte profile

2. aws-log comfigmap

 


 

1번 내용인 fargate profile 은 fargate 를 사용하기 위한 IAM Role 을 생성하는 부분으로 아래내용 참고하시면 됩니다

  • fargate profile 생성시 name space 나 lable 를지정할 수 있는대 pod를 생성할때 지정한 name space 나 lable 이 지정되어 있으면 해당 pod 는 fargate 로 생성 된다

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/fargate-profile.html

 

AWS Fargate 프로파일 - Amazon EKS

Amazon EKS가 있는 AWS Fargate은 AWS GovCloud(미국 동부) 및 AWSGovCloud(미국 서부)를 제외한 모든 Amazon EKS 지역에서 사용할 수 있습니다.

docs.aws.amazon.com

 


2번 내용인 aws-log comfigmap 은 fargate 를 cloudwatch 와 연계하기 위한 방법으로 해당 내용이 있어야 EKS 안에서 pod가 정상적으로실행 된다

 - cloudwatch 가 아닌 AWS OpenSearch Service 혹은 Kinesis Data Firehose 로 데이터를 수집 할 수도 있다

 - 제일 간단한 부분은 cloudwatch  로의 통합이라 아래 내용을 주로 사용 한다

 

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/fargate-logging.html

 

Fargate 로깅 - Amazon EKS

일반적인 Fluent Conf에 포함된 주요 단원은 Service, Input, Filter, Output입니다. 하지만 Fargate 로그 라우터는 다음 부분만 수락합니다. Filter 및Output 부분입니다. Parser 부분. 기타 부분을 제공하는 경우

docs.aws.amazon.com

 

  • aws-log 를 사용하기 위해서는 아래 yaml 파일을 EKS 에 배포해야 정상적으로 사용이 가능하다
kind: Namespace
apiVersion: v1
metadata:
  name: aws-observability
  labels:
    aws-observability: enabled

 

kind: ConfigMap
apiVersion: v1
metadata:
  name: aws-logging
  namespace: aws-observability
data:
  flb_log_cw: "false"  # Set to true to ship Fluent Bit process logs to CloudWatch.
  filters.conf: |
    [FILTER]
        Name parser
        Match *
        Key_name log
        Parser crio
    [FILTER]
        Name kubernetes
        Match kube.*
        Merge_Log On
        Keep_Log Off
        Buffer_Size 0
        Kube_Meta_Cache_TTL 300s
  output.conf: |
    [OUTPUT]
        Name cloudwatch_logs
        Match   kube.*
        region region-code
        log_group_name my-logs
        log_stream_prefix from-fluent-bit-
        log_retention_days 60
        auto_create_group true
  parsers.conf: |
    [PARSER]
        Name crio
        Format Regex
        Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$
        Time_Key    time
        Time_Format %Y-%m-%dT%H:%M:%S.%L%z

 

'AWS' 카테고리의 다른 글

Docker Oracle Image Build  (3) 2024.07.14
RDS 이벤트 구독을 통한 RDS 관리  (1) 2024.01.07
AWS EC2 종료 Lambda with EventBridge  (0) 2023.11.28
AWS EKS LB Controller Install  (0) 2023.09.29
AWS EC2/RDS Instance 정보 조회 Lambda 코드  (0) 2023.09.24

 

Grafana 를 사용하여 알람을 구성 하였는데, 그라파나 알람 에서 DatasuourceError 가 자주 발생한다

 - 위 알람은 Grafana 의 DataSource 가 정상적로 연동되지 않았을 경우 발생

 - 저의 경우 EKS 에서 기동중인 Prometheus가 Datasource 인데 EKS를 주기적으로 재기동 하는경우가 이에 해당 한다

 

만약 위 알람이 주기적으로 발생하고 알람에 대한 조치가 필요 없는 경우 아래와 같이 처리할 수 있다

 

1. Grafana 에서 주기적으로 발생하는 알람에 대하여 silence 를 걸어서 알람 제어

2. Grafana 에서 SNS를 발송하기 전에 Lambda 코드를 통해 DataSourceError 일경우는 SNS 발송을 하지 않기

 


 

1번 의 경우 silence 를 매일 다시 수정 해 주어야 하는 번거로움이 있어서 2번을 통해 진행

관련된 코드는 아래와 같으니 참고하여 적절한 내용으로 수정해서 도움이 되었으면 좋겠습니다

 

import json
import boto3

def lambda_handler(event, context):
    #send_sns(event)    
    alerts_info(event)
    print(event)
##alert 정보 변수 설정
def alerts_info(event):
    
    for i in event['detail']['alerts']:
        
        alert_name = i['labels']['alertname']
        alert_time = i['startsAt']
        if alert_name != "DatasourceError":
            alert_value = i['values']['C']
            sns_main = "Alert Name : " + alert_name + "\n" +  "Alert Time : " + alert_time + "\n" + "Alert Value :" +  json.dumps(alert_value)
            
            client = boto3.client('sns')
            client.publish(
            TopicArn='arn:aws:sns:ap-northeast-2:#########:cloudwatch',
            Message = sns_main,
            Subject = alert_name
            )

조건

Secret Name : my-secret

Secret Key : MySecret

Secret Value : SecretValue

 

Pod Name : env-secret-pod

Pod Image : Nginx

 


 

1. Secret 생성

kubectl create secret generic my-secret --from-literal=MySecret=SecretValue

 

 

2. Pod 생성

apiVersion: v1
kind: Pod
metadata:
  name: env-secret-pod
spec:
  containers:
  - name: envars-secret-container
    image: nginx
    env:
    - name: SECRET_NAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: MySecret

 

 

3. 결과 확인

kubectl exec env-secret-pod -- env

 

 

참고자료

https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/

 

Distribute Credentials Securely Using Secrets

This page shows how to securely inject sensitive data, such as passwords and encryption keys, into Pods. Before you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is re

kubernetes.io

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-secret-generic-em-

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD]k8s Job / CronJob  (0) 2023.09.10
[CKAD]Docker image build  (0) 2023.09.09

 


개요

AWS EC2 를 사용 하다보면 비용을 줄이고자 미사용 시간에 정지를 해야할 필요가 있다

이를 Lambda 와 EventBridge 로 구성하면 모든 EC2 에 대하여 자동으로 관리가 가능하다

 


 

작업내용

Lambda 코드 작성

EventBridge 설정

 


 

상세 작업

 

1. Lambda 코드

  • boto3 ec2 client 를 사용한다
  • ec2.describe_instances() 를 사용하여 현재 생성된 전체 EC2의 Instance_id 를 추출한다
  • ec2 client 의 ec2.stop_instances 를 사용하여 추출한 Instance_id 의 EC2를 종료 한다
import boto3

def lambda_handler(event,context):
    # Get the EC2 client
    ec2 = boto3.client('ec2')
    
    # Get the list of all instances
    describe_instance_assets = ec2.describe_instances()

    
    ec2_instance_list =[]
    for reservation in describe_instance_assets['Reservations']:
        for instance in reservation['Instances']:
            instance_id = instance['InstanceId']
            
            ec2_instance_list.append(instance_id)
            ec2.stop_instances(InstanceIds=[instance_id])
            
    # print(ec2_instance_list)

 

※주의사항

Lambda의 정상적인 실행을 위해서는 Lambda 권한에 EC2 제어 권한이 필요하다

 

 

2. EventBridge 설정

  • EventBridge - 일정 부분에 스케줄을 생성 한다

  • 일정 패턴 편집
  • 원하는 시간대로 설정
  • 시간대를 Asia/Seoul 로 설정하면 현지 시간으로 지정이 가능하다

  • 대상으로 람다 지정
  • 추가 설정 확인(불필요함으로 미지정)

 

  • 위와같이 생성하면 Eventbidge 에서 자동으로 Lambda 를 실행할 권한을 생성하게 된다
  • 설정한 시간대에 EventBridge 가 실행 되고, Lambda 를 호출하여 모든 EC2를 종료 하게 된다

 

 

 

 

'AWS' 카테고리의 다른 글

RDS 이벤트 구독을 통한 RDS 관리  (1) 2024.01.07
EKS fargate 생성을 위한 설정  (0) 2023.12.18
AWS EKS LB Controller Install  (0) 2023.09.29
AWS EC2/RDS Instance 정보 조회 Lambda 코드  (0) 2023.09.24
Route53 라우팅 정책  (0) 2023.08.05

+ Recent posts