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 )
- Slack API 페이지에 접속합니다.
- "Create a Slack App"을 클릭합니다.
- App 이름과 Development Slack Workspace를 선택하고 "Create App"을 클릭합니다.
- "Incoming Webhooks"을 활성화합니다.
- "Add New Webhook to Workspace"을 클릭하고, Webhook을 보낼 채널을 선택합니다.
- 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 *은 매주 월요일을 나타냅니다.
'Infra > AWS' 카테고리의 다른 글
AWS VPC The maximum number of VPCs has been reached. (0) | 2024.07.10 |
---|---|
AWS VPC private subnet & public subnet NAT gateway, Internet gateway (0) | 2024.07.10 |
AWS EC2 자동 실행 정지 Lambda 함수 (1) | 2023.10.24 |
AWS S3 버킷 생성 JS, React 배포, 데이터 백업 (0) | 2023.10.23 |
AWS EC2 생성 (ubuntu 프리티어) (0) | 2023.10.23 |