NAT Gateway 장애에 대한 Route Table 자동 변경 구현

0

서로 다른 AZ에 존재하는 NAT Gateway를 모니터링하고, 정상적으로 기능하지 않을 경우, subnet의 라우팅 테이블 연결을 자동으로 변경하는 lambda 함수를 구현하려고 합니다. Lambda 함수를 통해 NAT Gateway가 정상적으로 기능을 하는지 모니터링하기 위한 방법이 있을까요? Ping에 대한 응답은 받을 수 없는 것으로 알고 있습니다. 다른 방법이 있는지 궁금합니다.

2개 답변
2
수락된 답변

안녕하세요

NATGateway 모니터링이 가능한 AWS Lambda 함수를 구현하고 싶으신 것으로 이해했습니다.

NATGateway의 경우 별도의 추가 등록 없이도 CloudWatch를 통해서 관련 지표들을 확인하실 수 있으며,

이 CloudWatch를 AWS SDK와 연동하면 Lambda 함수에서 NATGateway 지표들의 조회가 가능합니다.


AWS Python SDK (Boto3)를 활용한 예시는 다음과 같습니다.

  • get_metrics_statistics()를 통해서 NATGateway의 지표를 요청합니다. 응답받은 response["Datapoints"]에 원하는 NatGateway의 지표 값이 포함되어 있습니다.
  • PacketDropCount 지표의 경우, 0.01보다 큰 값이 나타난다면 해당 NATGateway에 일시적인 문제가 발생하였음을 의심해볼 수 있습니다. 즉, 0.01을 기준으로 NATGateway의 이상 발생 가능성을 추측할 수 있습니다.
  • Lambda 함수의 [구성] - [권한] - [실행 역할]에서 IAM 역할(Role)에 CloudWatch 권한(CloudWatchReadOnlyAccess 등)이 연결되어야 합니다.
import json
import boto3

def lambda_handler(event, context):
    natgateway_id = "nat-07b3a8d19312a859a"
    cloudwatch = boto3.client('cloudwatch')
    
    response = cloudwatch.get_metric_statistics(
        Namespace="AWS/NATGateway",
        MetricName="PacketsDropCount",
        Dimensions=[{"Name": "NatGatewayId", "Value": natgateway_id}],
        StartTime="2023-10-19T00:00:00Z",
        EndTime="2023-12-20T00:00:00Z",
        Period=36000,
        Statistics=[ "Average" ]
    )   
    
    return {
        'statusCode': 200,
        'body': json.dumps({"metrics" : response["Datapoints"]}, default=str)
    }

답변이 도움이 되셨기를 바랍니다. 감사합니다.

profile picture
답변함 6달 전
0

안녕하세요.

NAT Gateway의 CloudWatch 지표에는 "PacketsDropCount"라는 지표가 있습니다.
이 메트릭은 NAT 게이트웨이에서 삭제한 패킷 수를 기록합니다.
이 메트릭의 값이 크면 NAT 게이트웨이가 제대로 작동하지 않을 수 있습니다.
즉, 이 지표를 기반으로 CloudWatch 경보를 생성하고 Lambda를 시작하면 NAT 게이트웨이를 전환할 수 있습니다.
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-nat-gateway-cloudwatch.html

profile picture
전문가
답변함 6달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인