[AWS] Lambda(Python) 및 맞춤 측정항목을 사용하여 VPN 연결 모니터링 [CloudWatch]

안녕하세요.
AWS에서 VPN 연결을 할 때 어떤 감시 메커니즘이 필요하다고 생각했기 때문에 Lambda와 CloudWatch의 커스텀 메트릭을 사용하여 모니터링해 보았습니다!
코드에 관해서는 공부 부족입니다. 죄송합니다.
더 범용적이고 보기 쉬운 코드를 작성할 수 있도록 공부합니다!

1. 이번에 할 일



· Lambda에서 VPN 연결 상태 값을 가져옵니다.
· 취득한 값을 CloudWatch에 풋.
· 커스텀 메트릭의 값은 UP하고 있는 VPN 터널의 개수.
Ex) VPN 터널 2개 모두 업하고 있는 경우, 「2」를 넣는다.
· Lambda의 스케줄 기능을 사용하여 5분마다 VPN의 연결 상태를 확인.

2. 전제



・VPN 1개, VPN 터널 2개의 환경을 상정해 스크립트를 만들고 있습니다.

3. 코드



pprint는 디버깅을 위해 남아 있습니다. 동작에는 특별히 관련이 없습니다.
def lambda_handler(event, context):
    import boto3
    import datetime
    #import pprint

    i = 0
    ec2 = boto3.client('ec2')
    cloudwatch = boto3.client('cloudwatch')
    #pp = pprint.PrettyPrinter(indent=4)


    #Check VPN Status
    response = ec2.describe_vpn_connections()


    Vpn1 = response["VpnConnections"][0]["VgwTelemetry"][0]["Status"]
    Vpn2 = response["VpnConnections"][0]["VgwTelemetry"][1]["Status"]


    if Vpn1 == "UP":
                i = i + 1
    if Vpn2 == "UP":
                i = i + 1

    #PutMetricData
    PutMetricData = cloudwatch.put_metric_data(
                Namespace='VPN',
                MetricData=[
                            {
                                        'MetricName': 'vpnConnection',
                                        'Timestamp': datetime.datetime.utcnow(),
                                        'Value': i,
                                        'Unit': "Count"
                            },
                ]
    )

    PutMetricData


4. 역할 권한



Lambda로 설정하는 역할은 다음과 같습니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeVpnConnections"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

4.Lambda 함수 생성



Lambda 함수를 만들 때까지 진행합니다.

· [람다]를 클릭합니다.


· [Create a Lambda function]을 클릭합니다.


· 템플릿을 사용하지 않으므로 [Skip]을 클릭합니다.


· [Name] [Description]에 임의의 값을 입력하고 [Runtime]에서 "Python2.7"을 선택합니다.
 [Lambda function code]에, 「3.코드」의 코드를 카피&페이스트 합니다.


· 권한을 설정합니다. [Role]에서 [Create new role]-[Basic execution role]을 선택합니다.


· [새 IAM 역할 만들기]를 선택하고 [역할 이름]에 원하는 값을 입력합니다.
그런 다음 편집을 클릭하고 "4. 역할 권한"의 값을 복사하여 붙여 넣습니다.


· 실행 시간을 설정합니다. [Timeout]의 시간을 30으로 설정하고 [Next]를 클릭합니다.
 # 어쩌면 더 짧아도 좋을지도 모릅니다.


· 미리보기가 표시되므로 내용을 확인하고 [Create function]을 클릭합니다.


· 이것으로 Lambda 함수 작성이 완료됩니다.


5.Lambda 일정 등록



다음으로 일정을 등록합니다.

· [Event sources]-[Add event source]를 클릭합니다.


· Cloudwatch Events - Schedule을 클릭합니다.


· [Rule name] [Rule description]에 임의의 값을 입력합니다.
[Schedule expression]에서 [rate(5 minutes)]를 선택하고 [Submit]를 클릭합니다.
일정에 대한 자세한 내용은 여기을 참조하십시오.


・이것으로 스케줄 등록도 완료입니다.


· CloudWatch의 커스텀 메트릭 값을 확인하면 5 분마다 값이 들어 있네요.
#VPN 터널이 모두 다운되었으므로 0을 반환합니다.


6. 마지막으로



・알림을 하는 경우는, CloudWatch로부터 경고의 설정을 하면 할 수 있군요.

・AWS 내부의 정보는 Amazon측으로부터 제공되지 않는 한 유저 스스로 감시해야 하기 때문에, Lambda를 사용한 감시는 굉장히 좋은 것이 아닐까 생각합니다. 무언가를 감시하기 위해서만 서버를 세우고 있다면 비용도 들기 때문입니다. 더 많은 Lambda를 잘 사용할 수 있도록 공부합니다!

간단하지만, 이상이됩니다.
지적 사항 등이 있으면 연락 부탁드립니다.

99. 참고



h tp : // 보토 3. Red d. cs. 이오 / 엔 / 아 st / 레후 렌세 / 세 r ゃ 세 s / 에 c2. HTML#E C2. C 엔 t. sc Ribe _vpn_Cone c Chion s
h tp : // 보토 3. Red d. cs. 이오 / 엔 / 아 st / 레후 렌세 / 세 r ゃ ぃ 세 s / c ぉ 우도 tch. html #C ぉ 우도 tch. C 엔 t. 푸 t_메 t c_
htps : // 시구니안 g. rdp rs. 코 m / 2014 / 12 / 19 / 푸 b sh sh-kus와 mime te cs-와 - ぉ 우도 t ch ぃ th a wsc ぃ /
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / ぁ mb다 / ㅁ st / dg / ぃ th ㅇ ぇ ぇ d ゔ ぇ ts. HTML

참고로 했습니다. 감사합니다.

좋은 웹페이지 즐겨찾기