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
回答済み 1年前
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
エキスパート
回答済み 1年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン