【AWS】Lambda용 NAT Gateway의 자동 기동・종료

10904 단어 자동화natgatewayAWS

NAT 게이트웨이 비용



도쿄 지역의 경우 다음 요금이 발생합니다.$0.062 per NAT Gateway Hour

자동화하려는 작업을 수동으로 확인



NAT 게이트웨이 삭제하기



루트 편집



VPC의 루트 테이블 페이지로 이동하여 루트 편집을 지정합니다.



아래 설정 항목 삭제
送信先:0.0.0.0/0
ターゲット:nat-(作成したやつ)

NAT 게이트웨이 삭제



VPC의 NAT 게이트웨이 설정 화면으로 이동하여 NATゲートウェイの削除


Elastic IP 릴리스



VPC의 ElasticIP 설정으로 주소를 해제합니다.



NAT 게이트웨이를 복원해 봅니다.



NAT 게이트웨이 만들기



VPC의 NAT 게이트웨이 설정 화면으로 이동하여 NATゲートウェイの作成
작성시 Elastic IP를 할당할 수 있으므로 여기서 할당해 버린다.

라우팅 테이블 편집



NAT 게이트웨이로 라우팅하려는 라우팅 테이블을 선택하고 다음 설정을 구성합니다.
送信先:0.0.0.0/0
ターゲット:nat-(作成したやつ)

Elastic IP 이름 수정



NAT 게이트웨이를 만들 때 생성된 Elastic IP의 이름을 지정합니다.
※ 반드시 붙일 필요는 없습니다만, 많아지면 관리할 수 없게 되기 때문에, 붙여 두는 것이 좋다고 생각합니다.

구성



이번에는, 정해진 시간에 자동 기동·종료하도록 하고 싶습니다.
아래 그림과 같이 CloudWatch Events를 트리거하고 Lambda가 작동하도록 구성합니다.


조작하는 내용은 다음과 같습니다.

■ NAT GateWay 시작 시
1. 월요일~금요일 아침 9시에 실행
2. Elastic IP 만들기
3. NAT GateWay 만들기
4. 서브넷의 라우팅 테이블에 NAT GateWay 할당

■ NAT GateWay 종료 시
1. 월요일~금요일 밤 7시에 실행
2. 서브넷 라우팅 테이블에서 NAT GateWay3. NAT GateWay 삭제
4. Elastic IP의 방출

부팅 프로세스 자동화



실행 역할 만들기



IAM 역할 만들기 화면에서 역할을 만듭니다.

필요한 정책은
- CloudWatchLogsFullAccess
- AmazonVPCFullAccess
- AWSLambdaBasicExecutionRole
의 3점입니다.
롤명은 적당한 것을 붙여 주세요.

Lambda 만들기



함수 만들기 페이지에서 設計図の使用를 선택하고 키워드에 lambda-canary를 지정하고 lambda-canary를 선택하고 設定 버튼을 누릅니다.



기본 정보




요소
설정


함수 이름
모든 이름

실행 역할
기존 역할 사용

기존 역할
위 단계에서 만든 역할을 선택하세요.


CloudWatch Events 트리거




요소
설정


규칙
새 규칙 만들기

규칙 이름
NAT_Start

규칙 설명
Create Elastic IP and NAT 게이트웨이.

스케줄 표현
cron(0 0 ? * MON-FRI *)


※스케줄식은, 협정 세계시(UTC)이므로 주의해 주세요.
스케줄식의 시차에 대해서

트리거를 활성화하려면 체크를 해제하십시오.

소스 코드와 환경 변수는 나중에 편집하므로 그대로 関数の作成를 클릭하십시오.

소스 코드



부팅 자동화
import os
import boto3
import logging
import json

""" ログ設定 """
logger = logging.getLogger()
logger.setLevel(logging.INFO)

""" 変数設定 """
subnet = os.environ['SUBNET_ID']

client = boto3.client('ec2')

def allocate_Eip():
    """ Elastic IPの取得処理 """
    response = client.allocate_address(Domain='vpc')
    return response.get('AllocationId')

def start_natgw(Eip,Subnet):
    """ NAT GateWayの開始処理 """
    response = client.create_nat_gateway(
        AllocationId=eip,
        SubnetId=Subnet
    )
    natid = response['NatGateway']['NatGatewayId']
    client.get_waiter('nat_gateway_available').wait(NatGatewayIds=[natid])
    return(natid)

def atatch_natgw(natgw, Subnet):
    """ サブネットへの割り当て処理 """
    filters = [ { 'Name': 'association.subnet-id', 'Values': [Subnet] } ]
    response = client.describe_route_tables(Filters = filters)
    rtb = response['RouteTables'][0]['Associations'][0]['RouteTableId']
    response = client.create_route(
        DestinationCidrBlock = '0.0.0.0/0',
        NatGatewayId = natgw,
        RouteTableId = rtb
    )

def lambda_handler(event, context):
    logging.info('■ 開始')
    eip = allocate_Eip()
    natgw = start_natgw(eip, Subnet)
    atatch_natgw(natgw, Subnet)
    logging.info('■ 終了')


종료 처리 자동화



실행 역할 만들기



기동시용으로 작성한 것을 이용합니다.

Lambda 만들기



함수 만들기 페이지에서 設計図の使用를 선택하고 키워드에 lambda-canary를 지정하고 lambda-canary를 선택하고 設定 버튼을 누릅니다.



기본 정보




요소
설정


함수 이름
모든 이름

실행 역할
기존 역할 사용

기존 역할
위 단계에서 만든 역할을 선택하세요.


CloudWatch Events 트리거




요소
설정


규칙
새 규칙 만들기

규칙 이름
NAT_Stop

규칙 설명
Delete Elastic IP and NAT 게이트웨이.

스케줄 표현
cron(0 10 ? * MON-FRI *)


※스케줄식은, 협정 세계시(UTC)이므로 주의해 주세요.
스케줄식의 시차에 대해서

트리거를 활성화하려면 체크를 해제하십시오.

소스 코드와 환경 변수는 나중에 편집하므로 그대로 関数の作成를 클릭하십시오.

소스 코드

좋은 웹페이지 즐겨찾기