본문 바로가기
카테고리 없음

AWS Lambda 프리티어 이상 사용하면 자동 중단되도록 하기

by 오근성 2023. 9. 22.
728x90

먼저 Lambda 를 하나 생성합니다.

 

 

CloudWatch

에서 경보 생성을 클릭합니다

 

지표 아래 설정된 것 처럼 람다가 서비스 될 위치, 그리고 람다, 함수이름별 로 진입하여

 

저희는 총 2개를 설정합니다.

 

"Invocations"에 대한 알람 설정:

  1. CloudWatch 대시보드에 접속합니다.
  2. 왼쪽 메뉴에서 'Alarms'를 클릭하고, 'Create Alarm' 버튼을 선택합니다.
  3. 지표 선택 화면에서 "Lambda" 서비스를 선택하고, "Function Name"을 선택하여 앞서 만든 람다 함수(encodingPy)를 선택합니다.
  4. 지표 목록에서 "Invocations"를 선택하고, 'Select metric' 버튼을 클릭합니다.
  5. Conditions 섹션에서 다음을 설정합니다:
    • Threshold type: Static
    • Whenever Invocations is: Greater/Equal (이상)
    • than...: 프리티어 제한인 1,000,000을 입력
  6. Actions 섹션에서 알람 동작을 정의합니다. (이메일 알림 등을 설정)
  7. Create Alarm을 클릭하여 알람을 생성합니다.

"Duration"에 대한 알람 설정:

  1. 다시 'Alarms'로 돌아가 'Create Alarm' 버튼을 선택합니다.
  2. 지표 선택 화면에서 "Lambda" 서비스를 선택하고, "Function Name"을 선택하여 앞서 만든 람다 함수(encodingPy)를 선택합니다.
  3. 지표 목록에서 "Duration"을 선택하고, 'Select metric' 버튼을 클릭합니다.
  4. Conditions 섹션에서 다음을 설정합니다:
    • Threshold type: Static
    • Whenever Duration is: Greater/Equal (이상)
    • than...: 프리티어 제한인 3,200,000 (3.2 million seconds)을 입력
  5. Actions 섹션에서 알람 동작을 정의합니다. (이메일 알림 등을 설정)
  6. Create Alarm을 클릭하여 알람을 생성합니다.

 

 

함수명으로 설정하기 클릭하고

 

invocations (호출 량)

클릭합니다.

 

33300은 최대사용량 에서 30을 나눈값이라 생각하면됨

33300은 최대사용량 에서 30을 나눈값이라 생각하면됩니다.

 

위처럼 설정해요

 

{
  "source": [
    "aws.cloudwatch"
  ],
  "detail-type": [
    "CloudWatch Alarm State Change"
  ]
}

 

 

 

 

 

Lambda에서 프로그래밍 방식으로 IAM 역할을 수정하려면 AWS SDK를 사용해야 합니다. 여기에서는 Python과 boto3를 사용한 예제를 제공하겠습니다.

먼저, 실행할 Lambda 함수에 아래와 같은 권한을 추가해야 합니다:

  • iam:ListAttachedRolePolicies
  • iam:DetachRolePolicy
  • iam:ListPolicies

다음은 IAM 역할에서 lambda:InvokeFunction 권한을 제거하는 Python 코드입니다:

pythonCopy code
import boto3 def remove_invoke_permission(role_name): client = boto3.client('iam') # 연결된 정책을 가져옵니다. policies = client.list_attached_role_policies(RoleName=role_name)['AttachedPolicies'] for policy in policies: # 정책 세부 정보를 가져옵니다. policy_detail = client.get_policy(PolicyArn=policy['PolicyArn']) # 해당 정책에서 lambda:InvokeFunction 액션이 있는지 확인합니다. if 'lambda:InvokeFunction' in str(policy_detail): # 정책을 역할에서 분리합니다. client.detach_role_policy(RoleName=role_name, PolicyArn=policy['PolicyArn']) print(f"Detached policy {policy['PolicyName']} from {role_name}") def lambda_handler(event, context): # 여기에서 Lambda 함수의 역할 이름을 변경하십시오. role_name = 'YOUR_LAMBDA_ROLE_NAME' remove_invoke_permission(role_name) return { 'statusCode': 200, 'body': f"lambda:InvokeFunction permission removed from {role_name}" }

참고:

  1. 위의 코드는 lambda:InvokeFunction 액션이 포함된 모든 정책을 역할에서 분리합니다. 이는 원치 않는 권한 제거를 초래할 수 있으므로 코드를 실행하기 전에 주의가 필요합니다.
  2. YOUR_LAMBDA_ROLE_NAME을 실제 Lambda 함수의 IAM 역할 이름으로 교체해야 합니다.

이 함수를 실행하면 Lambda 함수의 IAM 역할에서 lambda:InvokeFunction 권한이 제거됩니다. 다시 추가하려면 수동으로 IAM 콘솔을 사용하거나 별도의 Lambda 함수를 작성해야 합니다.

728x90

댓글