AWS

lambda

cloud Watch - event bridge

IAM

 

Etc

slack

 

 

1. IAM role 생성

AmazonEC2ReadOnlyAccess 정책 배정

 

 

2. lambda function생성

Runtime - Python 3.9

Permissions - 1번에서 만든 role 사용

 

  • code 작성 ( local 환경 )

Lambda 함수에서 `requests` 모듈을 사용하는 경우, 해당 모듈을 포함한 배포 패키지를 만들어야 합니다. Lambda는 기본적으로 `requests` 라이브러리를 포함하지 않으므로, 직접 포함시켜야 합니다.

mkdir lambda_function
cd lambda_function
pip install requests -t .
import boto3
import json
import os
import requests

def lambda_handler(event, context):
    # EC2 클라이언트 생성
    ec2 = boto3.client('ec2')
    
    # 사용 가능한 EBS 볼륨 찾기
    volumes = ec2.describe_volumes(
        Filters=[
            {
                'Name': 'status',
                'Values': ['available']
            }
        ]
    )
    
    available_volumes = volumes['Volumes']
    
    # 사용 가능한 EBS 볼륨이 있는지 확인
    if not available_volumes:
        print("No available volumes found.")
        return
    
    # 사용 가능한 EBS 볼륨 정보 생성
    volume_info = ""
    for volume in available_volumes:
        volume_info += f"Volume ID: {volume['VolumeId']}, Size: {volume['Size']} GiB, Availability Zone: {volume['AvailabilityZone']}\n"
    
    # 사용 가능한 EBS 볼륨 정보 출력
    print("Available volumes:\n", volume_info)
    
    # Slack Webhook URL
    slack_webhook_url = os.environ['SLACK_WEBHOOK_URL']
    
    # Slack으로 메시지 전송
    slack_message = {
        'text': f"Available EBS Volumes:\n{volume_info}"
    }
    
    response = requests.post(slack_webhook_url, data=json.dumps(slack_message), headers={'Content-Type': 'application/json'})
    
    if response.status_code != 200:
        raise ValueError(f"Request to Slack returned an error {response.status_code}, the response is:\n{response.text}")
    
    return {
        'statusCode': 200,
        'body': json.dumps('Slack message sent successfully!')
    }

 

  • .zip으로 압축
zip -r ../lambda_function.zip .

 

  • zip 파일 업로드

 

  • Slack app 생성 ( SLACK_WEBHOOK_URL )
  1. Slack API 페이지에 접속합니다.
  2. "Create a Slack App"을 클릭합니다.
  3. App 이름과 Development Slack Workspace를 선택하고 "Create App"을 클릭합니다.
  4. "Incoming Webhooks"을 활성화합니다.
  5. "Add New Webhook to Workspace"을 클릭하고, Webhook을 보낼 채널을 선택합니다.
  6. Webhook URL을 복사해 둡니다

 

  • lambda 환경 변수에 `SLACK_WEBHOOK_URL` 등록

 

  •  Slack 채널 추가 및 앱 등록 후 lambda code test

 

  • cron 등록

cloud watch -> events -> rules -> create rule -> rule type ( schedule ) -> continue in EventBridge Scheduler

 

cron(0 0 ? * 2 *)

0 0은 00:00 (자정)을 의미하고, ?는 특정한 일자를 지정하지 않음을 의미합니다. * * 2 *은 매주 월요일을 나타냅니다.

 

+ Recent posts