AWS EKS 에서 서비스의 형식으로 LB를 사용하는 경우 여러 옵션 값들을 사용 할 수 있다.

 

각 어플리케이션의 인입으로 LB를 사용할 경우 환경에 맞게 세팅 변경이 필요한데 이때 Annotations 를 사용하여 변경하면 된다.

 

대표적으로 LB의 종류, 서브넷 지정, IP 지정 등 다양한 옵션을 아래 문서에서 찾아서 사용 하면 된다.

 

[AWS Annotations 문서]

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/service/annotations/

 

Annotations - AWS Load Balancer Controller

Annotations Service annotations Annotation keys and values can only be strings. All other types below must be string-encoded, for example: boolean: "true" integer: "42" stringList: "s1,s2,s3" stringMap: "k1=v1,k2=v2" json: "{ \"key\": \"value\" }" Annotati

kubernetes-sigs.github.io

 

'AWS' 카테고리의 다른 글

ECR Multi Region Replication  (0) 2023.06.04
EKS 최초 생성 권한 문제  (0) 2023.04.16
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20
AWS Instance Network Bandwidth  (0) 2022.10.30

EventBridge 는 AWS 및 3rd Party 에서 발생하는 이벤트들을 수집하는 역할을 담당 하고 있다.

AWS 에는 여러가지 많은 서비스 들이 있는데 EventBridge 는 각 서비스들에서 발생 시키는 Event 에 대하여 트리거 설정을 할 수 있다.

 

[이해를 돕기위한 그림]

CloudTrail -----①----- EventBridge -----②----- SNS

설명
CloudTrail 에서 특정 이벤트가 발생 하였을 경우 그에 대한 이벤트 로그가 AWS 내부에 남게 된다
이때 발생한 이벤트 로그중 일부분을 EventBridge 에 설정(트리거 역할)
트리거조건이 충족되면 EventBridge 에서 설정한 다음 동작이 수행된다
SNS 뿐만아니라 Lambda 등 다양한 AWS 서비스를 연계시킬수 있다

설정 방법

 

1. EventBridge 생성

2. 샘플 이벤트 설정

  • 해당 샘플에서는 CloudTrail 에 대한 설정을 진행할 예정
  • 샘플 이벤트에서 CloudTrail 을 입력하면 여러가지가 나오는데 그중 아래와 같이 AWS API Call via CloudTrail 을 선택

 

3. 이벤트 샘플 JSON 확인

  • 이벤트 샘플을 선택하면 나오는 JSON 을 확인하여 필요한 조건을 지정
  • 해당 예시에서는 CloudTrail 을 사용해서 누가 특정한 Role 을 사용하는지 확인 하고 싶을때에 대한 예이다
  • 밑에 Json 구분중 userName 이 적힌 부분이 있을 것이다. 이부분을 트리거로 잡아서 알람을 발생 시킬예정
{
  "version": "0",
  "id": "a1aa69ff-66e8-c3eb-2e47-3776ac5935dd",
  "detail-type": "AWS API Call via CloudTrail",
  "source": "aws.resource-groups",
  "account": "123456789012",
  "time": "2022-02-17T09:42:52Z",
  "region": "us-east-1",
  "resources": [],
  "detail": {
    "eventVersion": "1.08",
    "userIdentity": {
      "type": "AssumedRole",
      "principalId": "XYZZYOR:admin",
      "arn": "arn:aws:sts::123456789012:role/admin",
      "accountId": "123456789012",
      "accessKeyId": "XYZZY",
      "sessionContext": {
        "sessionIssuer": {
          "type": "Role",
          "principalId": "XYZZYOR",
          "arn": "arn:aws:iam::123456789012:role/Admin",
          "accountId": "123456789012",
          "userName": "Admin"
        },
        "webIdFederationData": {},
        "attributes": {
          "creationDate": "2022-02-17T09:41:02Z",
          "mfaAuthenticated": "false"
        }
      }
    },
    "eventTime": "2022-02-17T09:42:52Z",
    "eventSource": "resource-groups.amazonaws.com",
    "eventName": "CreateGroup",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "52.94.133.138",
    "userAgent": "aws-cli/2.2.31 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off command/resource-groups.create-group",
    "requestParameters": {
      "Description": "test6",
      "Name": "test301",
      "ResourceQuery": {
        "Type": "CLOUDFORMATION_STACK_1_0",
        "Query": "{ \"ResourceTypeFilters\": [ \"AWS::AllSupported\" ], \"StackIdentifier\": \"arn:aws:cloudformation:us-east-1:123456789012:stack/test/aa434df0-fe92-11eb-bde9-0a03f460991d\"}"
      }
    },
    "responseElements": {
      "Group": {
        "GroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/test301",
        "Name": "test301",
        "Description": "test6",
        "OwnerId": "123456789012"
      },
      "ResourceQuery": {
        "Type": "CLOUDFORMATION_STACK_1_0",
        "Query": "{ \"ResourceTypeFilters\": [ \"AWS::AllSupported\" ], \"StackIdentifier\": \"arn:aws:cloudformation:us-east-1:123456789012:stack/test/aa434df0-fe92-11eb-bde9-0a03f460991d\"}"
      }
    },
    "requestID": "31cabb57-0931-4cdb-b66b-137267531dd1",
    "eventID": "4d51d885-3d1f-4579-bf42-96924aadbc3f",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
  }
}

4. 트리거 설정

  • 위에 있는 Json 전체 코드중 userName 만 필요
  • userName 이 User-Name 인경우를 트리거 하는 코드는 아래와 같다
  • 생성방법에서 사용자 지정 패턴을 사용하여 아래 코드를 입력

{
    "source": ["aws.cloudtrail"],
    "detail": {
        "userIdentity": {
            "sessionContext": {
                "sessionIssuer": {
                    "userName": ["User-Name"]
                }
            }
        }
    }
}

5. 대상 동작 설정

  • 위와같은 트리거가 발생 하였을때 실행할 대상을 선택하는 곳

 

6. 결과 확인

  • 위와같이 설정을 하게되면 CloudTrail 에서 이벤트 발생시 EventBridge 가 작동해서 SNS 를 보내게 된다
  • SNS 메일로 오는 결과 값은 CloudTrail 전체 Json 에 있던 내용을 받게 된다

※참고자료

  • AWS 에서 발생하는 이벤트들은 AWS 에서 자체적으로 이벤트를 발생시켜 주기때문에 샘플을 사용하여 확인하면됨
  • AWS가 아닌 3rd Party 에서 발생하는 이벤트는 Lambda 를 통해 이벤트 발생을 시킬 수 있다.
  • 3rd Party 에서 Lambda 를 바로 호출 할 수 있다면 Lambda 를 바로 사용하면 되고, 그렇지 않을경우(대부분이 사설망이다보니 바로호출이 불가함) API Gateway 를통해서 Lambda 를 호출하면 된다.
  • 3rd Party[webhook] -> API gateway URL -> Lambda -> EventBridge -> SNS 순으로 완성되게 된다.

[Event 발생시키는 Lambda Code]

from datetime import datetime
import json
import boto3
import datetime

client = boto3.client('events')

def lambda_handler(event, context):

    response = client.put.events(
        Entries=[
            {
                'Time': datetime.datetime.now(),
                'Source': 'Lambda Publish',
                'Resources': [],
                'DetailType': 'Custom event demo'
                'Detail': json.dumps(event),
                'EventBusName': 'arn:aws:events:ap-northeast-2:xxxxxxxxxxxxxxxxxxxxxxxxxx:event-but/default'
            }
        ]
    )
return response

 

'AWS' 카테고리의 다른 글

EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20
AWS Instance Network Bandwidth  (0) 2022.10.30
AWS Certification 종류  (0) 2022.10.30

보안그룹이 모두 열려있는 개인이 가진 AWS 콘솔에서는 문제가 없겠지만, 사설망에서 사용하는경우 와 빡빡하게 보안그룹을 관리하는 경우에는 EKS 생성시 필요한 조건이 충족되지 못하여 EKS Cluster Join Failed 에러가 종종 발생한다.

 

이를 해결하기 위해 몇일 찾아봤지만 마땅한 답을 찾지 못했다. 그래서 AWS 서포트에 문의를 했고 해당 원인을 찾을 수 있었다.

 

EKS 생성에는 여러가지 조건이 있겠지만 내가 놓친 부분은 Endpoint 에 대한 부분 이었다.

같은 VPC 대역대이고, IAM 권한등을 다 확인을 했지만 문제를 찾지 못했는데 예상외로 EKS 생성시 필요한 Endpoint 가 많았다. 

 

1. EC2 Endpoint

2.  ECR.API Endpoint

3. ECR.dkr Endpoint 

4. S3 Endpoint 

EKS nodegroup 생성시 join failed error 가 발생하면 위 Endpoint 의 보안그룹을 확인해 보는걸 추천한다.

 

EKS 문서를 보면 자세하게 나와 있으니 참고하면 된다.

https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-worker-nodes-cluster/

 

작업자 노드를 Amazon EKS 클러스터에 조인

내 워커 노드를 내 Amazon EKS 클러스터에 조인하려면 어떻게 해야 합니까? 최종 업데이트 날짜: 2022년 7월 29일 내 워커 노드가 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 조인되지 않습니다. 간

aws.amazon.com

https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshooteksworkernode.html

 

AWSSupport-TroubleshootEKSWorkerNode - AWS Systems Manager Automation runbook reference

To successfully run this automation, the state of your Amazon EC2 worker node must be running , and the Amazon EKS cluster state must be ACTIVE .

docs.aws.amazon.com

 

 

'AWS' 카테고리의 다른 글

EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS Instance Network Bandwidth  (0) 2022.10.30
AWS Certification 종류  (0) 2022.10.30

AWS 에서 제공하는 각 서비스에는 네트워크 대역폭이 존재한다.

 
아래 사진을 보면 일반적인 교육용으로 많이 사용하는 t3.micro는 네트워크 성능이 최대 5Gbps 인것을 알 수있다.
 
 
여기서 중요한 부분이 '최대' 5Gbps이다.
AWS 에서 말하는 최대의 기준은 크레딧을 사용하여 버스트를 활성화 했을때 이야기이다. 
따라서 일반적으로 사용자가 적용받는 네트워크 성능은 아래 첨부된 사진과 같다.
 
추가적인 크레딧 사용이 없는 사용자가 t3.micro 인스턴스를 생성해서 사용할 경우 네트워크 대역폭은 0.064Gbps = 8MB 와 같다.
 
실제로 AWS 를 사용하다 보면 인스턴스 생성시 네트워크 대역폭은 버스트시 사용 가능한 대역폭으로 나타나 있어서 리소스가 부족한 현상들을 자주 접할 수 있다.
 
위 글을 참고 해서 기준 네트워크 대역폭을 고려해서 인스턴스 생성을 하시기 바랍니다
 
 
관련자료

'AWS' 카테고리의 다른 글

EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20
AWS Certification 종류  (0) 2022.10.30

AWS 자격증 종류

  1. 기초
    • 클라우드에 관한 개념을 배우고자 하는 단계
    • 일반적으로  AWS 사용 1년 미만 경험에 대한 자격 검증
    • 약 7일 정도 공부로 취득 가능[개인적인 생각]
  2.     어소시에이트
    • 아키텍트 설계, 클라우드 운영, 개발자 영역으로 나뉜 클라우드의 개념을 익히고 주된 스킬을 익히는 단계
    • 일반적으로 AWS 사용 1~2년 경험에 대한 자격 검증
    • 약 3주 정도 공부로 취득 가능[개인적인 생각]
  3. 프로페셔널
    • 어소시에이트의 기술을 토대로 AWS 서비스를 응용 할 수 있는 수준
    • 일반적으로 AWS 사용 3~5년 경험에 대한 자격 검증
    • 약 2달 정도 공부로 취득 가능[개인적인 생각]
  4. 전문분야
    • 네트워크, 데이터, 보안 등 한가지 분야에 대한 고급 기술을 가진 사람에 대한 자격 검증
    • 일반적으로 AWS 사용 5년 이상에 대한 자격 검증
    • 시험 난이도가 상당히 높은걸로 알고 있음

준비과정

 

AWS는 Azure, GCP 등과 더불어 해외 클라우드 시장의 대부분의 점유율을 차지하고 있는 만큼 AWS에서 자체적으로 운영하는 교육 공간도 있고, 관련 자료 또한 많이 있다. 이 중 제가 공부한 내용을 토대로 몇 가지 사이트를 알려 드리겠습니다.

  1. Udemy
    • AWS 뿐만 아니라 다양한 학습자료가 많은 사이트로, 한 달에 두 번 정도 70% 이상 할인을 하기 때문에 할인할 때 학습자료를 사서 공부하는 걸 추천합니다. 아래에 있는 인프런/패스트캠퍼스보다는 저렴하지만 영어로 되어 있어 학습에 다소 어려움이 있을 수 있다. 
    • 기본적으로 영어 사이트이기 때문에, 강의를 사실 때 CC(자막) 이 있는 강의를 구매하셔서 강의를 보실대 대본보기를 사용해서 구글 자체 기능인 한국어로 번역을 해서 공부하시면 됩니다.
    • AWS 공부/자격증을 위한 강의가 있고, AWS 연습 시험(덤프) 문제도 학습할 수 있다. 
    • 시간을 들여서 AWS 공부를 하고 싶다면 AWS Hands-on 또는 AWS 강의 영상을 보면 되고, 시간이 없고 빠르게 자격증을 취득하고 싶다면 AWS 연습 시험(덤프)을 통해 답만 빠르게 외워서 하는 방법이 있다.
  2. 인프런
    • 한국어로 된 사이트로 개발자를 위한 교육이 다수 있는 사이트이다. 강의 검색으로 AWS 검색해 보시면 자격증에 대한 강의보다는, AWS 사용에 대한 기본적인 강의부터 개발에 이르기까지 다양한 강의를 볼 수 있다. 
  3. 패스트캠퍼스
    • 인프런이 개발에 대한 다수의 교육이 주를 이루고 있다면, 패스트캠퍼스는 다양한 주제에 맞는 강의가 존재한다. 설계, 개발, 네트워크, DevOps 등 다양한 주제에 대한 강의가 많으나 다소 비싸다는 단점이 있다. 하지만 교육에 대한  퀄리티가 제일 좋은 느낌을 준다.

 

'AWS' 카테고리의 다른 글

EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20
AWS Instance Network Bandwidth  (0) 2022.10.30

+ Recent posts