Lambda, PowerShell 및 Event Bridge를 사용하여 EFS에서 오래된 백업/로그 파일/임시 파일 삭제

최근에 리프트 앤 시프트 전략을 사용하여 레거시 애플리케이션을 AWS로 마이그레이션하는 요구 사항에 대해 작업하고 있었습니다. 이 응용 프로그램은 많은 로그 데이터와 임시 파일을 생성하는 데 사용됩니다.

로그, 임시 및 백업 폴더 크기는 2일 만에 약 20GB에 도달했습니다. 우리는 EFS를 사용하고 있었고 EFS에 연결된 여러 EC2 인스턴스가 있었습니다.



각 파일을 분석한 결과 임시 파일은 전처리용으로만 사용되며 한 번만 필요하므로 이전 로그 파일(액세스 로그 제외) 및 이전 백업 파일과 함께 삭제하기로 결정했습니다.

Powershell Lambda를 사용하고 EFS를 Lambda와 통합하기로 결정했습니다. 이 기능은 EFS에서 불필요한 데이터를 모두 삭제합니다. 이 기능은 Event Bridge를 사용하여 주기적으로 실행되며 불필요한 파일을 삭제합니다.

먼저 Visual Studio Code를 사용하여 Lambda 함수를 생성합니다.

1단계: Visual Studio 코드 다운로드
2단계: powershell에서 아래 명령 실행
$region_code = 'ap-south-1'
$secretKey='your secret key'
$accessKey='your access key'
#Install-Module AWSPowerShell -Scope CurrentUser#Install-Module AWSLambdaPSCore -Scope CurrentUserimport-Module AWSPowerShell -Force
Import-Module AWSLambdaPSCore -Force
#configure script credentials
Initialize-AWSDefaultConfiguration -AccessKey $accessKey -SecretKey $secretKey -Region ap-south-1
Set-AWSCredential -AccessKey $accessKey -SecretKey $secretKey -StoreAs default
#shows existing function list from AWS
Get-LMFunctionList
Get-AWSPowerShellLambdaTemplate

Basic Barebone Script를 사용하고 여기에 스크립트 명령을 추가할 것입니다.

스타터 Lambda 함수 생성


New-AWSPowerShellLambda -ScriptName DeleteUnusedFiles -Template Basic
Visual Studio Code의 탐색기 창에서 이 프로젝트 폴더를 얻거나 폴더를 가져올 수 있습니다. 이 프로젝트는 동일한 위치에 생성됩니다.

3단계: Powershell 스크립트에 아래 명령을 추가합니다. 이는 Lambda 함수가 성공적으로 가져올 수 있도록 하기 위한 것입니다.
cd /mnt/efs
Remove-Item * -Include *.tmp
ls /mnt/efs

4단계: AWS에 Lambda 함수 업로드

$publishPSLambdaParams = @{                                                                       
     name = "DeleteUnusedFiles "
     ScriptPath = ".\DeleteUnusedFiles\DeleteUnusedFiles.ps1"
     Region = "ap-south-1"
     IAMRoleArn = "delete_backup_rp_role"
     }

Publish-AWSPowerShellLambda @publishPSLambdaParams




아래와 같이 EFS 파일 시스템과 액세스 포인트를 생성했습니다(EFS 및 탑재 대상 설정에 대한 자세한 내용은 아래 비디오 참조).

다음은 내 Accesspoint에 대한 세부 정보입니다.



EFS가 생성되고 액세스 포인트가 준비되면 EC2 인스턴스에 로그인하고 EFS를 마운트해야 합니다.

1) EFS 마운트 도우미 설치

sudo yum install -y amazon-efs-utils

2) 폴더를 efs로 생성

mkdir/efs

3) EFS 마운트

sudo 마운트 -t efs -o tls,액세스 포인트=fsap-9999999999999999 fs-8888888888888888:/efs

Important Step



아래와 같이 EFS에서 보안 그룹을 구성해야 합니다.





위의 단계가 완료되면 아래와 같이 EFS와 Lambda를 통합합니다.

**** 중요. 먼저 Lambda를 VPC에 연결해야 합니다. 이 단계를 수행하지 않으면 EFS를 연결할 수 없습니다.



1) 아래 권한으로 역할을 생성하고 이를 Lambda 함수와 연결합니다.


2) Lambda 함수를 엽니다(이 예에서는 PowerShell 람다 함수를 사용하고 있습니다).
3) 구성 탭으로 이동
4) 파일 시스템 하위 탭 열기

아래 스크린샷에 따라 EFS 파일 시스템, 액세스 포인트 및 로컬 마운트 포인트를 선택하고 저장/만들기 버튼을 누르십시오.



성공적으로 게시되면 테스트 이벤트를 생성한 후 Lambda 함수를 열고 테스트를 클릭하여 함수를 테스트할 수 있습니다.

아래 스크린샷에서 볼 수 있듯이 EFS 공유에 있는 파일을 보여주는 ls 명령의 결과를 볼 수 있으므로 Lambda에서 EFS에 액세스할 수 있음을 보여줍니다.



이것이 성공적으로 생성되면 Event Bridge를 사용하여 Lambda 함수가 주기적으로 실행되도록 예약할 수 있습니다.

문제 해결:

".NET CLI를 구성할 수 없습니다"라는 오류 메시지가 표시되면 메모장++의 경로에서 아래 파일을 엽니다.

C:\Program Files\WindowsPowerShell\Modules\AWSLambdaPSCore\3.0.1.0\Private_DeploymentFunctions.ps1

$LASTEXITCODE 키워드로 찾기
이 변수를 사용하는 모든 발생 및 조건에 주석을 달고 아래 명령을 실행합니다.

import-Module AWSPowerShell -Force
Import-Module AWSLambdaPSCore -Force


Powershell을 사용하여 Lambda 함수를 다시 업로드해 보십시오. 지금 작동해야 합니다.

이 게시물에 대한 다른 의견이나 제안이 있으면 알려주세요.

제 유튜브 채널을 구독해주세요

감사,
우즈왈쿠마르 소니

좋은 웹페이지 즐겨찾기