AWS DVA-C02 Udemy 요약

Jul 20, 2023
AWS DVA-C02 Udemy 요약
  • 이번에도 덤프 문젠 못 봤다.
  • C02로 코스가 변경 되었는데, 아직 한글 번역을 안해서 C01을 보고 있다. 강의는 C02 내용이 일부 포함 되어 있다
56. 고가용성 및 확장성
  • 스케일 인/아웃, 스케일 업/다운
 
62. Network Load Balancer (NLB)
  • Tcp/udp/고정 IP => NLB / http => ALB
  • NLB : heath check : TCP, HTTP, HTTPS
 
64. 게이트웨이 로드 밸런서(GWLB)
  • GWLB : GENEVE protocol
 
65. ELB - Sticky Sessions
  • Sticky session : 쿠키 사용
66. ELB - Cross Zone Load Balancing
  • Cross zone load balancing : ALB는 기본 사용
67. ELB - SSL 인증서
  • SNI : 하나의 로드 밸런서 리스너에서 각각 자체 TLS 인증서가 있는 다수의 보안 애플리케이션을 호스팅하도록 해주는 서비스, ALB & NLB, CloudFront 에서만 동작
69. ELB - 연결 드레이닝
  • Connection Draining : 연결 취소 지연
76. RDS 읽기 전용 복제본과 다중 AZ
  • RDS에서 Read replica를 멀티 AZ로 승격 가능 (멈춤 x)
78. 오로라
  • Aurora : 6 카피/3AZ , max 15 read replica writer endpoint, reader endpoint
81. [DVA-C02] RDS 프록시
  • RDS proxy : 서버리스, 장애 조치 극복 (66%), 최소 연결 수, IAM만 사용 가능, VPC, 람다에서만 접근 가능
84. 일래스틱캐시 (ElastiCashe) 전략
  • 아래 코드를 보고 레이지로딩 (=캐시 어사이드, 레이지 포풀레이션) 인 것을 알아야 함
    • notion image
      notion image
87. Route 53 개요
  • Route53 - Record Types
      1. A - map a hostname to ipv4
      1. AAAA - map a hostname to ipv6
      1. CNAME - maps a hostname to another hostname
      1. NS - Name Servers for the Hosted Zone
92. Route 53 CNAME 대 Alias
  • CNAME vs Alias -> APEX로 CNAME을 설정할 수 없으니 Alias로 하고 이걸 ALB에 연결
100. 라우팅 정책 - 지리적 근접성
  • Route53에서 지리적 접근성 정책으로 한 리전에서 다른 리전으로 트래픽을 보낼 수 있음
111. 3계층 아키텍처
  • Vpc 3계층, LAMP (: Linux, Apache, MySQL, PHP ) + Redis or Memcached
125. AWS CLI 테스트 실행
  • -dry-run : 실제로 실행하지 않고 작업에 필요한 권한이 있는지 확인 할 때 사용.
126. AWS CLI STS 디코딩
$ aws sts decode-authorization-message --encoded-message : 에러 메시지 디코딩
 
127. AWS EC2 인스턴스 메타데이터
  • AWS EC2 Instance Metadata :
$curl http://169.254.169.254/latest/meta-data/
 
128. AWS CLI 프로필
$aws configure --profile [profile]
$aws s3 ls --profile [profile]
 
129. MFA가 있는 AWS CLI
$aws sts get-session-token --seiral-number [MFA device arn] --token-code [MFA code] $vi ~/.aws/credential code => add aws_session_token
 
130. AWS SDK 개요
  • SDK 쓰는 경우 : Lambda 등 sdk
  • 기본 리전은 us-east-1
131. 지수 백오프 및 서비스 제한 증가
  • API Call Limit (Quota)
    • API 호출에 제한이 걸려 있음
      • Ex) EC2 DescribeInstance : 100 Call Per Seconds
      • Ex) S3 GetObject 5500 : 5500 Call Per Seconds, Per Prefix
      • 제한을 넘길시 ThrottlingException 오류 발생
    • Exponential Backoff 수행
  • Exponential Backoff
    • AWS SDK를 이용한 API 호출시 AWS SDK 내부적으로 Exponential Backoff Logic이 포함되어 있음
    • AWS API를 직접 호출시 Client에서 Exponential Backoff Logic을 직접 구현
    • 5XX Error 발생시에만 Backoff를 시도하도록 구현 필요
    • 4XX Error 발생시 Backoff 수행 X
    •  
132. AWS 자격 증명 공급자 및 체인
  • Aws cli credentials provider chain
133. [DVA-C02] AWS 서명 v4 서명
  • SigV4 request : http header || pre-signed URLs
141. S3 암호화
  1. SSE-S3 : "x-amz-server-side-encryption": "AES256", S3 기본 암호화에 적용됨
  1. SSE-KMS :
    1. "x-amz-server-side-encryption": "aws:kms"
    2. Cloudtrail로 감사 가능
    3. 초당 5500, 10000, 30000 KMS 쿼터가 있고, 콘솔에서 늘릴 수 있음. 디크립션할 때 API 사용해야 함
  1. SSE-C : client에서 이미 키를 이용하여 암호화하여 s3에 저장
 
154. CloudFront 개요
  1. Origin (원본)에는 아래 2개가 있음
    1. S3 bucket :
      1. CloudFront Origin Access Control (OAC) 로 향상된 보안 제공
      2. 지금은 OAC는 Origin Access Identity는 예전 방식(OAI를 제공하긴 함)
      3. S3에 파일 업로드할 때를 ingress라고 함
    2. Custom Origin (HTTP)
      1. ALB, EC2, S3 website, Any HTTP BE
  1. Cache Policy vs Origin Request Policy
    1. Cache Policy는 캐시된 응답을 제어하고 캐시 행동을 구성하는 데 사용됩니다. 예를 들어, 캐시 수명 주기(TTL), 특정 캐시 키, 헤더 조작 등을 설정할 수 있습니다. 캐시 정책은 특정 도메인 또는 경로에 대한 캐싱 규칙을 정의하는 데 사용됩니다.
    2. Origin Request Policy는 원본 서버로 전송되는 요청을 수정하고 조작하는 데 사용됩니다. 요청 헤더를 변경하거나 쿼리 문자열을 조작하는 등의 작업을 수행할 수 있습니다. 이 정책은 특정 도메인 또는 경로에 대한 요청 수정 규칙을 정의하는 데 사용됩니다.
155. CloudFront 실습
  • CloudFront 캐시 무효화 : 콘솔 가서 Invalidations 탭에서 path에 파일명 입력 또는 /* 로 전체 무효화 가능
160. CloudFront - 오리진으로서의 ALB
  • CloudFront의 오리진은 2개 인데, alb와 ec2 임
notion image
167. Amazon ECS
  • ECS for IAM role : Instance profile 롤과 EC2 task Role 구분
    • notion image
172. Amazon ECS - 롤링 업데이트
  • ECS rolling update
notion image
notion image
notion image
173. Amazon ECS - 솔루션 아키텍처
  • ECS Architecture
    • notion image
      notion image
174. Amazon ECS 태스크 정의 - 심화 학습
  • ECS task definition :
      1. 1개의 태스크당 10개의 컨테이너까지
      1. 태스크 정의 당 IAM 역할 할당
        1. 각 ECS 태스크가 이 ECS 태스크 역할을 자동으로 추측 상속함 (태스크 정의 수준임)
        2. ECS 태스크에 대한 IAM 역할은 지정은 태스크 정의 상에서 함
      1. 여러개의 컨테이너 사이에서 데이터를 공유하거나 사이드 카 컨테이너가 존재
        1. notion image
  • 다음은 중요한 정보를 포함하고 있는 문장입니다
    • Image Name
    • Port Binding for Container and Host
    • Memory and CPU required
    • Environment variables
    • Networking information
    • IAM Role
    • Logging configuration (ex CloudWatch)
176. Amazon ECS - 태스크 배치
  1. ECS Tasks placement :
    1. 배치 : 아래 3개를 섞어서 할 수 있음
      1. Binpack : 인스턴스에 최대한 태스크를 실행함 => 인스턴스 수를 아끼므로 비용 절약
      2. Random : 랜덤으로 테스크 배치
      3. Spread : 순서대로 태스크 배치
    2. 강제 배치 :
      1. Distinct Instance : 동일 인스턴스에 2개의 task를 배치 할 수 없음
      2. MemberOf : 클러스터 쿼리 랭귀지 사용
      3.  
177. Amazon ECR
  • AWS CoPilot : AWS에서 컨테이너화된 애플리케이션을 빠르게 시작하고 쉽게 관리할 수 있도록 하는 CLI : 앱 생성, 배포관리, 로깅 모니터링에 사용
178. Amazon ECR 실습
  • EKS : data volumes : EBS, EFS (only fargate), Amazon FSx for Lustre, Amazon Fsx for NetApp ONTAP
186. Beanstalk 배포 모드 *
  • Beanstalk 배포 옵션
    • 한 번에 전체 배포 (All at once): 가장 빠르지만, 인스턴스가 일시적으로 트래픽을 처리할 수 없는 시간(다운타임)이 발생합니다. 무료
      • notion image
    • 롤링 (Rolling): 일부 인스턴스를 한 번에 업데이트하고, 첫 번째 그룹이 정상 동작하면 다음 그룹으로 이동하는 방식입니다. 무료, 배포 중 2개 버전 존재
      • notion image
    • 추가 배치를 포함한 롤링 (Rolling with additional batches): 롤링과 유사하지만, 배치를 이동할 때 새로운 인스턴스를 생성하여 이전 버전의 애플리케이션이 여전히 사용 가능하도록 합니다. 추가 요금 발생
      • notion image
    • 불변 (Immutable): 새로운 Auto Scaling 그룹에 새로운 인스턴스를 생성하고, 해당 인스턴스에 버전을 배포한 후 모든 인스턴스를 교체하는 방식입니다. ASG 추가 생성 (비용이 많이 듬) -> 롤백이 쉬움
      • notion image
    • 블루-그린(Blue-Green): 새로운 환경을 생성하고, 준비가 완료되면 전환하는 방식입니다.
      • notion image
    • 트래픽 분할 (Traffic Splitting): 카나리아 테스트로 알려진 방식으로, 새로운 배포로 일부 트래픽을 보내는 방식입니다.
      • notion image
191. Beanstalk 및 CloudFormation
  • Beanstalk은 cloudformation으로 만든 것임 => elastic cache, DynamoDb, S3 버킷 배포 가능
193. Beanstalk 마이그레이션
  • Beanstalk 마이그레이션 :
      1. 빈스톡 초기 설정 시 로드벨런서를 정하면 바꿀 수 없음
      1. 이 로드밸런서를 바꾸려면 마이그레이션을 해야 함
194. 도커가 있는 Beanstalk
  • Beanstalk 도커 사용 :
      1. Dockerrun.aws.json 으로 ECS task definition 생성
      1. 이미지는 ECR 사용
195. Beanstalk 고급 개념
  • Beanstalk HTTPS
      1. 콘솔에서 로드벨런서에 인증서 처리
      1. 또는 .ebextensions/securelistener-alb.config 사용
      1. Packer 소프트웨어 => 사용자 지정 플랫폼
204. [DVA-C02] CodePipeline – 기타 사항
  • CodePipeline – Manual Approval Stage
      1. 소유자는 aws
      1. IAM user 권한 : GetPipeline* ,PutApprovalResult
209. CodeDeploy 개요
  • CodeDeploy
      1. CodeDeploy Agent
      1. Appspec.yml
        1. notion image
      1. CodeDeploy - Deployment Configuration
        1. Configurations:
          1. One At A Time - one EC2 instance at a time, if one instance fails then deployment stops
          2. Half At A Time - 50%
          3. All At Once - quick but no healthy host, downtime. Good for dev
          4. Custom - min. healthy host = 75%
        2. Failures:
          1. EC2 instances stay in "Failed" state
          2. New deployments will first be deployed to failed instances
          3. To rollback, redeploy old deployment or enable automated rollback for failures
        3. Deployment Groups:
          1. A set of tagged EC2 instances
          2. Directly to an ASG
          3. Mix of ASG / Tags so you can build deployment segments Customization in scripts with DEPLOYMENT_GROUP_NAME environment variables
211. EC2 및 ASG용 CodeDeploy
  • CodeDeploy : 롤백은 이전으로 돌아가는 것이 아니고, 이전에 정상적으로 배포된 것으로 새로 배포하는 것
 
212. [DVA-C02] CodeDeploy - 기타 사항
  • CodeDeploy 문제 해결
      1. InvalidSignatureException : 시간 동기화를 해라
      1. 로그 파일 위치 : /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log
       
214. CodeStar - 실습
  • CodeStar : 팀이 한 번에 볼 수 있는 다른 코드 서비스와 개발자 서비스를 결합할 수 있는 서비스
215. [DVA-C02] CodeArtifact 개요
  • CodeArtifact
    • resource policy
      • notion image
    • 누구에게 내 계정에 대한 액세스 권한을 부여하려면, 리소스 정책을 사용하여 다른 계정에게 CodeArtifact 리포지토리의 패키지 읽기 권한을 부여 -> 리소스 정책이 꼭 필요함
216. [DVA-C02] CodeArtifact - 업스트림 리포지토리 및 도메인
  • CodeAfrifact - 업스트림 리포지토리 및 도메인 : CodeArtifact를 사용하면 업스트림 리포지토리를 중앙 집중화하여 패키지 종속성을 효율적으로 관리할 수 있으며, 여러 프로젝트 또는 팀 간에 패키지를 공유하고 보안을 강화할 수 있습니다.
      1. 업스트림 리포지토리 (Upstream Repository): 업스트림 리포지토리는 CodeArtifact에서 사용자가 종속성을 가져올 수 있는 외부 패키지 저장소입니다. 이 리포지토리는 일반적으로 공개적으로 액세스할 수 있는 공개 저장소(예: Maven Central, PyPI 등)나 사용자가 설정한 개인 저장소(예: NPM Registry, RubyGems 등)를 의미합니다. CodeArtifact는 업스트림 리포지토리에 대한 캐싱, 중복 제거, 버전 관리 등의 기능을 제공하여 응용 프로그램에서 종속성을 효율적으로 관리하고 다운로드할 수 있도록 도와줍니다.
      1. 도메인 (Domain): 도메인은 CodeArtifact에서 패키지 저장소를 그룹화하고, 액세스 권한과 보안 설정을 구성하는 단위입니다. 도메인은 패키지 저장소를 만들고 관리하는 논리적인 컨테이너 역할을 합니다. 도메인은 일반적으로 조직, 프로젝트, 응용 프로그램 또는 팀과 같은 개념적인 단위에 대응할 수 있습니다. CodeArtifact 도메인은 여러 업스트림 리포지토리와 패키지 저장소를 관리하고, 사용자 및 그룹에 대한 액세스 권한을 설정하여 패키지의 공유와 보안을 제어하는 데 사용됩니다.
       
218. CodeGuru 개요
  • Code Guru - ML로 코드 커밋 시 코드 최적화, 취약점 분석, 버그 식별
      1. CodeGuru Reviewer: 소스 코드를 분석하여 개발자에게 자동적으로 리뷰 및 피드백을 제공하는 도구입니다
      1. CodeGuru Profiler: 애플리케이션의 런타임 프로파일링을 통해 성능 병목 현상을 식별하고 최적화할 수 있는 도구입니다
219. [DVA-C02] CodeGuru - 에이전트 구성
  • Amazon CodeGuru - Agent Configuration : 단어 정도만 알자
      1. MaxStackDepth - the maximum depth of the stacks in the code that is represented in the profile
        1. Example: if CodeGuru Profiler finds a method A, which calls method B, which calls method C, which calls method D, then the depth is 4
        2. If the MaxStackDepth is set to 2, then the profiler evaluates A and B
      1. MemoryUsageLimitPercent - the memory percentage used by the profiler
      1. Minimum TimeForReportinginMilliseconds - the minimum time between sending reports (milliseconds)
      1. ReportingIntervallnMilliseconds - the reporting interval used to report profiles (milliseconds)
      1. SamplingIntervallnMilliseconds- the sampling interval that is used to profile samples (milliseconds)
        1. Reduce to have a higher sampling rate
225. CloudFormation 스택 생성 실습
  • CloudFormation 생성 시 imported resoures는 시험범위 밖
  • Configuration stack에서 Stack policy과 Rollback configuration Notification options과 Stack creation options 등 고급 설정은 시험 범위 밖
 
226. YAML 단기집중과정
딱히 적을 것이 없네
227. CloudFormation 리소스
  • Resource :
#강의에 있는 설명 AWS::aws-product-name::data-type-name #https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html service-provider::service-name::data-type-name
 
228. CloudFormation 매개변수
Parameters Settings
Parameters can be controlled by all these settings:
  • Type:
    • String
    • Number
    • CommaDelimitedList
    • List<Type>
    • AWS Parameter (to help catch invalid values - match against existing values in the AWS Account)
  • ConstraintDescription (String)
  • Min/MaxLength
  • Min/MaxValue
  • Defaults
  • AllowedValues (array)
  • AllowedPattern (regexp)
  • Description
  • NoEcho (Boolean)
  • Constraints
 
Concept: Pseudo Parameters
  • AWS offers us pseudo parameters in any CloudFormation template.
  • These can be used at any time and are enabled by default
Reference Value
Example Return Value
AWS::AccountId
1234567890
AWS: :NotificationARNs
[arn:aws:sns:us-east-1:123456789012:MyTopic]
AWS: : NoValue
Does not return a value.
AWS:: Region
us-east-2
AWS:: StackId
arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1c2fa62 0-982a-11e3-aff7-50e2416294e0
AWS : : StackName
MyStack
 
229. CloudFormation 매핑
Fn:FindinMap
Accessing Mapping Values
  • We use Fn:: FindInMap to return a named value from a specific key
  • !FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
AWSTemplateFormatVersion:"2010-09-09" Mappings: RegionMap: us-east-1: "32": "ami-6411e20d" "64": "ami-7a11e213" us-west-1: "32": "ami-c9c7978e" "64": "ami-cfc7978a" eu-west-1: "32": "ami-37c2£643" "64": "ami=31025645" ap-southeast-1: "32": "ami-66529034" "64": "ami-60290329" ap-northeast-1: "32": "ami-9c03a896" "64": "ami-20032821" Resources: myECZinstance: Type: "AWS::EC2::Instance" Properties: ImageId : !FindInMap [RegionMap, !Ref:"AWS::Region", 32] InstanceType: m1.small
 
230. CloudFormation 출력
  • 매우 중요
  • Outputs Example
    • Creating a SSH Security Group as part of one template
    • We create an output that references that security group
    • Outputs: StackSSHSecurityGroup: Description: The SSH Security Group for our Company Value: !Ref MyCompanyWideSSHSecurityGroup Export: Name: SSHSecurityGroup
  • Cross Stack Reference
    • We then create a second template that leverages that security group
    • For this, we use the Fn: : ImportValue function
    • You can't delete the underlying stack until all the references are deleted too.
    • Resources: MySecureInstance: Type: AWS::EC2::Instance Properties: AvailabilityZone: us-east-1a Imageld: ami-a4c7edb2 InstanceType: t2.micro SecurityGroups: - !ImportValue SSHSecurityGroup
232. CloudFormation 내장 함수 *
CloudFormation에서 반드시 알아야 할 내장 함수 CloudFormation에서 사용되는 내장 함수 중 가장 중요한 함수들이 있습니다. 아래는 반드시 알아야 할 내장 함수들의 목록입니다.
  • Ref
  • Fn::GetAtt ⇒ 리소스의 속성을 가져 올 때 사용
  • Fn::FindInMap
  • Fn::lmportValue
  • Fn::Join
    • 간단한 문자열 배열 연결

      다음 예제는 "a:b:c"를 반환합니다.
      !Join [ ":", [ a, b, c ] ]

      파라미터와 함께 Ref 함수를 사용하여 연결

      다음 예제는 Fn::Join을 사용하여 문자열 값을 생성합니다. 이는 Ref 파라미터 및 AWS::Partition 가상 파라미터와 함께 AWS::AccountId 함수를 사용합니다.
      !Join - '' - - 'arn:' - !Ref AWS::Partition - ':s3:::elasticbeanstalk-*-' - !Ref AWS::AccountId
  • Fn::Sub ⇒ 문자열 대체
  • Condition Functions (Fn::lf, Fn::Not, Fn::Equals, 등등..)
위 함수들은 CloudFormation Template에서 매우 유용하게 사용됩니다. 하지만, 이외에도 다른 내장 함수들이 존재합니다.
 
233. CloudFormation 롤백 *
  • Roll back all stack resources: 실패 이전 상태로 완전히 롤백하여 일관성을 유지
  • Preserve successfully provisioned resources: 실패한 리소스만 롤백하고 성공적으로 프로비저닝된 리소스들을 유지
 
234. [DVA-C02] CloudFormation 스택 알림
notion image
235. CloudFormation ChangeSet, 중첩 스택 및 StackSet *
  • Cross Stacks: 독립적인 스택 간 의존성을 설정하는 방식으로 사용
  • Nested Stacks: 하나의 스택 내에서 스택을 중첩하여 모듈화 및 재사용성을 지원하는 방식
  • Stack set :
    • 단일 작업으로 여러 계정과 리전에 걸쳐서 스택을 생성, 업데이트 또는 삭제하는데 적용 가능한 방법
    • 관리자 계정이 StackSet를 생성한 다음 신뢰할 수 있는 계정이 StackSet로부터 스택 인스턴스를 생성, 업데이트 또는 삭제
    • StackSet을 업데이트하면 연결된 모든 리전과 계정에 대한 스택 인스턴스 또한 업데이트 됨
    • StackSet을 생성하면 리전 1의 계정 A, 리전 2의 계정 A 리전 2의 계정 B까지 적용
    • 시험에서 여러 계정과 여러 리전의 CloudFormation 스택 업데이트에 대해 물어볼 때면 StackSets이 답
    •  
236. CloudFormation 드리프트
  • 드리프트 : CloudFormation 스택(Stack)의 현재 상태와 템플릿(Template)에 정의된 원하는 상태 간의 차이를 검사하는 프로세스
  • 이를 통해 스택의 상태를 추적하고 예기치 않은 변경 사항을 식별
  • 드리프트를 실행하면 현재의 리소스 상태와 템플릿에 정의된 상태를 비교하여 차이를 확인
237. [DVA-C02] CloudFormation 스택 정책
  • 스택의 구성 요소 및 리소스에 대한 변경을 제어
  • 실수나 인위적인 변경으로 인한 잠재적인 문제 방지
  • resource에 대한 명시적 allow를 해 줘야 함
248. [DVA-C02] CloudWatch Synthetics
  • Canary는 사용자가 정의한 시나리오에 따라 웹 애플리케이션을 자동으로 테스트하는 봇입니다. 이 봇은 특정 작업을 수행하고, 웹 페이지를 방문하고, 사용자 입력을 시뮬레이션하고, API 요청을 수행하여 애플리케이션의 동작을 테스트합니다.
  • CloudWatch Synthetics Canary Blueprint는 Amazon CloudWatch Synthetics에서 제공하는 사전 구성된 모니터링 템플릿
    • Heartbeat Monitor - URL을 로드하고 스크린샷 및 HTTP 아카이브 파일을 저장합니다.
    • API Canary - REST API의 기본적인 읽기 및 쓰기 기능을 테스트합니다.
    • Broken Link Checker - 테스트 중인 URL 내의 모든 링크를 확인합니다.
    • Visual Monitoring - 캐너리 실행 중에 촬영한 스크린샷과 기준 스크린샷을 비교합니다.
    • Canary Recorder - CloudWatch Synthetics Recorder와 함께 사용되며, 웹 사이트에서 수행한 작업을 기록하고 해당 작업에 대한 스크립트를 자동으로 생성합니다.
    • GUI Workflow Builder - 웹 페이지에서 작업을 수행할 수 있는지 확인합니다(예: 로그인 폼을 테스트합니다).
252. X-Ray 개요 *
AWS X-Ray를 활성화하는 방법은 다음과 같습니다:
  1. 코드에서 AWS X-Ray SDK를 가져와야 합니다. (Java, Python, Go, Node.js, .NET 등)
      • 코드 수정이 거의 필요하지 않습니다.
      • 응용 프로그램 SDK가 다음을 캡처합니다:
        • AWS 서비스 호출
        • HTTP/HTTPS 요청
        • 데이터베이스 호출 (MySQL, PostgreSQL, DynamoDB 등)
        • 큐 호출 (SQS 등)
  1. X-Ray 데몬을 설치하거나 X-Ray AWS 통합을 활성화해야 합니다.
      • X-Ray 데몬은 UDP 패킷을 저수준으로 캡처하는 기능을 합니다. (Linux, Windows, Mac 등에서 작동)
      • AWS Lambda 및 기타 AWS 서비스는 이미 X-Ray 데몬을 실행하고 있습니다.
      • 각 응용 프로그램은 X-Ray에 데이터를 쓸 수 있는 IAM 권한이 있어야 합니다.
 
** 시험 문제는 X-Ray가 왜 동작 안하느냐 : IAM 권한, 데몬 실행 여부, X-Ray 코드 추가여부, 람다의 경우 추적 활성화 여부
256. X-Ray: API *
  • READ api
    • notion image
      1. "xray:GetSamplingRules":
          • 사용 가능한 모든 샘플링 규칙을 검색합니다.
          • X-Ray은 추적을 샘플링하여 효율적인 리소스 사용을 위해 사용됩니다.
      1. "xray:GetSamplingTargets":
          • 지정된 샘플링 규칙에 대한 샘플링 대상 정보를 검색합니다.
          • X-Ray은 추적을 수집하기 전에 샘플링 대상을 결정하는 데 사용됩니다.
      1. "xray:GetSamplingStatisticSummaries":
          • 사용 가능한 추적 통계 요약 정보를 검색합니다.
          • X-Ray은 추적에 대한 통계 정보를 제공하며, 이는 성능 분석 및 모니터링에 유용합니다.
      1. "xray:BatchGetTraces":
          • 지정된 ID에 해당하는 여러 추적을 검색합니다.
          • 각 추적은 단일 요청에서 생성된 세그먼트 문서의 모음입니다.
      1. "xray:GetServiceGraph":
          • 주어진 서비스에 대한 그래프 정보를 검색합니다.
          • X-Ray은 분산된 서비스 간의 종속성 및 상관 관계를 시각화하는 데 사용됩니다.
      1. "xray:GetTraceGraph":
          • 하나 이상의 추적에 대한 서비스 그래프 정보를 검색합니다.
          • X-Ray은 추적된 서비스 간의 관계를 시각화하여 분산 시스템의 동작을 이해하는 데 도움을 줍니다.
      1. "xray:GetTraceSummaries":
          • 지정된 시간 범위 내에 사용 가능한 추적에 대한 ID 및 주석을 검색합니다.
          • 전체 추적을 검색하려면 이 API를 사용하여 추적 ID를 가져온 후 "xray:BatchGetTraces"에 전달할 수 있습니다.
      1. "xrav:GetGroups":
          • 사용 가능한 X-Ray 그룹의 목록을 검색합니다.
          • X-Ray 그룹은 관련된 추적 및 서비스를 논리적으로 그룹화하여 구성합니다.
      1. "xray:GetGroup":
          • 지정된 X-Ray 그룹에 대한 세부 정보를 검색합니다.
          • X-Ray 그룹은 특정 추적과 서비스를 관리하는 데 사용됩니다.
      1. "xray:GetTimeSeriesServiceStatistics":
          • 지정된 시간 범위 내에 서비스의 시간별 통계 정보를 검색합니다.
          • X-Ray은 서비스의 성능 및 동작 통계를 제공하여 모니터링 및 분석에 활용됩니다.
  • Write api
    • notion image
    • PutTraceSegments: segment 문서를 AWS X-Ray에 업로드합니다.
    • PutTelemetryRecords: AWS X-Ray 데몬이 텔레메트리를 업로드하는 데 사용됩니다.
    • SegmentsReceivedCount, SegmentsRejectedCounts, BackendConnectionErrors 등
    • GetSamplingRules: 모든 샘플링 규칙을 검색합니다(무엇을/언제 전송할지 알기 위해).
    • GetSamplingTargets: 고급 샘플링을 위한 기능입니다.
    • X-Ray 데몬은 올바른 API 호출에 대한 IAM 정책을 가지고 있어야 올바르게 작동합니다.
    •  
258. X-Ray 및 ECS
  • 2000 UDP로 매핑
  • XRAY_DAEMON_ADDRESS라는 환경 변수를 설정
  • 2개의 컨테이너를 네트워킹 관점에서 연결
notion image
259. OpenTelemetry를 위한 AWS Distro *
AWS Distro는 다음과 같은 특징을 가진 안전하고 검증된 오픈 소스의 지원 배포판입니다:
  • 오픈 소스의 안전하고 지원되는 배포판입니다.
  • 단일 집합의 API, 라이브러리, 에이전트 및 수집기 서비스를 제공합니다.
  • 애플리케이션으로부터 분산 추적 및 메트릭을 수집합니다.
  • AWS 리소스 및 서비스로부터 메타데이터를 수집합니다.
  • 코드를 변경하지 않고 추적을 수집하기 위해 자동 인스트루멘테이션 에이전트를 제공합니다.
  • 추적과 메트릭을 여러 AWS 서비스 및 파트너 솔루션으로 전송합니다.
  • X-Ray, CloudWatch, Prometheus 등이 포함됩니다.
  • AWS에서 실행되는 애플리케이션(EC2, ECS, EKS, Fargate, Lambda) 및 온프레미스에서 실행되는 애플리케이션에 인스트루멘테이션할 수 있습니다.
  • X-Ray에서 AWS Distro for Telemetry로 마이그레이션하여 Telemetry의 오픈 소스 API로 표준화하거나 추적을 동시에 여러 대상으로 전송할 수 있습니다.
AWS Distro는 오픈 소스 기반의 강력한 텔레메트리 솔루션으로, 애플리케이션의 추적과 메트릭 수집을 표준화하고 간소화하는 데 도움을 줍니다.
262. CloudTrail 대 CloudWatch 대 X-Ray *
  • CloudTrail:
    • 사용자/서비스/AWS 콘솔에서 수행된 API 호출을 감사합니다.
    • 권한 없는 호출이나 변경의 근본 원인을 감지하는 데 유용합니다.
  • CloudWatch:
    • 모니터링을 위한 시간에 따른 CloudWatch 메트릭스
    • 애플리케이션 로그 저장을 위한 CloudWatch 로그
    • 예기치 않은 메트릭의 경우 알림을 보내는 CloudWatch 알람
  • X-Ray:
    • 자동 추적 분석 및 중앙 서비스 맵 시각화
    • 지연 시간, 오류 및 결함 분석
    • 분산 시스템 간의 요청 추적
266. Amazon SQS - 표준 Queues 개요
  • 애플리케이션 분리 ⇒ SQS
  • 오토 스케일링 그룹이 더 많은 EC2 인스턴스를 제공하면 ⇒ 메시지들을 더 높은 처리량으로 처리할 수 있습니다
notion image
268. SQS Queues 액세스 정책 *
notion image
  • Cross Account Access에서 필요한 정책은 다음과 같음
  1. 보내는 측 (Sender) 계정의 IAM 정책:
      • SQS 큐에 대한 SendMessage 작업에 대한 권한이 있어야 합니다. 이를 위해 보내는 측 IAM 사용자 또는 역할에 다음과 유사한 정책을 추가해야 합니다:
        • { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-2:RECEIVING_ACCOUNT_ID:QUEUE_NAME", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:iam::SENDING_ACCOUNT_ID:root" } } } ] }
        • RECEIVING_ACCOUNT_ID: 메시지를 받을 대상 계정의 AWS 계정 ID입니다.
        • QUEUE_NAME: 메시지를 보낼 대상 큐의 이름입니다.
        • SENDING_ACCOUNT_ID: 메시지를 보내는 계정의 AWS 계정 ID입니다.
  1. 받는 측 (Receiver) 계정의 IAM 정책:
      • SQS 큐에 대한 ReceiveMessage 작업에 대한 권한이 있어야 합니다. 이를 위해 받는 측 IAM 사용자 또는 역할에 다음과 유사한 정책을 추가해야 합니다:
        • { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sqs:ReceiveMessage", "Resource": "arn:aws:sqs:us-west-2:RECEIVING_ACCOUNT_ID:QUEUE_NAME", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:iam::SENDING_ACCOUNT_ID:root" } } } ] }
        • RECEIVING_ACCOUNT_ID: 메시지를 받을 대상 계정의 AWS 계정 ID입니다.
        • QUEUE_NAME: 메시지를 받을 대상 큐의 이름입니다.
        • SENDING_ACCOUNT_ID: 메시지를 보내는 계정의 AWS 계정 ID입니다.
        •  
  • S3 버킷의 알림 이벤트를 AWS SQS로 전송하기 위한 정책은 다음과 같습니다:
  1. SQS 큐에 메시지를 보낼 수 있는 권한을 설정합니다. 이를 위해 SQS 큐에 대한 SendMessage 작업에 대한 권한을 추가해야 합니다.
    1. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:REGION:ACCOUNT_ID:QUEUE_NAME" } ] }
      • REGION: SQS 큐가 위치한 AWS 리전을 나타냅니다.
      • ACCOUNT_ID: SQS 큐가 속한 AWS 계정의 ID입니다.
      • QUEUE_NAME: 메시지를 보낼 대상 큐의 이름입니다.
  1. S3 버킷에 대한 알림 구성을 설정합니다. 이를 위해 S3 버킷의 알림 구성에서 SQS를 대상으로 지정해야 합니다. 이 단계는 AWS Management Console, AWS CLI, 또는 AWS SDK 등을 통해 수행할 수 있습니다.
      • 알림 구성을 설정하는 방법은 다소 복잡하며 다양한 구성 요소를 포함할 수 있습니다. 아래 예시는 S3 버킷의 ObjectCreated 이벤트를 SQS로 전송하는 구성 예시입니다:
      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSQSPermissions", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:REGION:ACCOUNT_ID:QUEUE_NAME", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::BUCKET_NAME" } } } ] }
      • REGION: SQS 큐가 위치한 AWS 리전을 나타냅니다.
      • ACCOUNT_ID: SQS 큐가 속한 AWS 계정의 ID입니다.
      • QUEUE_NAME: 메시지를 보낼 대상 큐의 이름입니다.
      • BUCKET_NAME: S3 버킷의 이름입니다.
269. SQS - 메시지 가시성 시간 초과 *
  • 메시지를 받은 후 메시지가 숨겨진(visible) 상태로 유지되는 시간
  • 해당 시간 동안 메시지는 같은 큐에 있는 다른 수신자에게 보이지 않음.
  • 기본 30초
 
270. SQS - 배달 못한 편지 Queues *
 
DLQ는 다음과 같은 주요 기능을 제공합니다:
  1. 에러 처리: 메시지 처리 중에 오류가 발생한 경우, 해당 메시지는 DLQ로 이동됩니다. 이를 통해 문제가 있는 메시지를 추적하고 검토할 수 있습니다.
  1. 재시도 메커니즘: DLQ에 저장된 메시지는 수동으로 또는 자동으로 재시도할 수 있습니다. 예를 들어, DLQ의 메시지를 다시 처리하여 실패한 처리를 재시도할 수 있습니다.
  1. 재처리 및 디버깅: DLQ에 저장된 메시지를 분석하고, 원인을 파악하여 필요한 조치를 취할 수 있습니다. 이를 통해 시스템의 문제를 해결하고 개선할 수 있습니다.
DLQ는 SQS 큐와 동일한 방식으로 생성되며, 일반적으로 원래 목적지 큐와 다른 큐로 구성됩니다. 메시지가 DLQ로 이동하면 해당 메시지의 기본적인 속성은 유지되며, 추가적인 속성(예: 실패 이유)이 제공될 수도 있습니다.
273. SQS - 공인 개발자 개념 *
  • Long polling
    • 길게 설정하면 호출 api 횟수가 줄어듬 → 효율성 증가
    • 메시지 수신 시간 줄어듬
    • 기본적으로 short polling 말고 long polling이 좋음 (보통 20초)
    • WaitTimeSeconds 파라미터로 수정 가능
  • SQS Extended Client
    • 대용량 메시지 전송
    • 원리는 S3에 데이터를 넣고 SQS에 메타 데이터를 넣어서 전달
  • 반드시 알아야 할 api
    • CreateQueue : 대기열 생성,
      • MessageRetentionPeriod : 대기열 보관 시간
    • DeleteQueue : 대기열 삭제
    • PurgeQueue : 대기역 삭제
    • SendMessage : 메시지 전달
      • DelaySeconds : 메시지 지연 발송
    • ReceiveMessage : 메시지 폴링
    • DeleteMessage : 메시지 하나 삭제
    • MaxNumberOfMessages : 메시지를 한번에 받는 갯수, 기본 1, 최대 10
    • ReceiveMessageWaitTimeSeconds : 메시지 받을 때까지 대기 시간 → Long polling과 같음
    • ChangeMessageVisibility : 가시성 타임 아웃 설정
    • 여러 API 호출을 묶음으로 사용 : SendMessage, DeleteMessage, ChangeMessageVisibility 사용
    •  
       
277. Amazon SNS and SQS - 팬아웃 패턴 *
notion image
notion image
notion image
notion image
notion image
278. SNS 실습
  • 프로토콜 : Kinesis Data Firehose, SQS, Lambda, Email, Email-JSON HTTP, HTTPS, SMS
281. Kinesis 프로듀서
  • ProvisionedThroughputExceeded : 프로비저닝된 샤드를 초과한 경우
    • 해결 방안 1 : 매우 잘 분산된 파티션 키를 사용
    • 해결 방안 2 : 기하급수적인 백오프를 통해 재시도 구현
    • 해결 방안 3 : 샤드 증가
282. Kinesis 소비자
  • Kinesis Consumers Types
  1. Shared (Classic) Fan-out Consumer - pull
    1. Low number of consuming applications
    2. Read throughput: 2 MB/sec per shard across all consumers
    3. Max. 5 GetRecords API calls/sec
    4. Latency - 200 ms
    5. Minimize cost ($)
    6. Consumers poll data from Kinesis using GetRecords API call
    7. Returns up to 10 MB (then throttle for 5 seconds) or up to 10000 records
  1. Enhanced Fan-out Consumer - push
    1. Multiple consuming applications for the same stream
    2. 2 MB/sec per consumer per shard
    3. Latency ~ 70 ms
    4. Higher costs ($$$)
    5. HTTP2 API
    6. Soft limit of 5 consumer applications (KCL) per data stream (default)
284. Kinesis 클라이언트 라이브러리
notion image
286. Kinesis Data Firehose 개요 *
  • Kinesis data firehose 도착지
    • s3
    • redshift (copy from s3)
    • elastic search
    • 3rd party
    • HTTP Endpoint (API)
 
기능
Kinesis Data Streams
Kinesis Data Firehose
데이터 적재 속도
실시간 (~200ms)
거의 실시간 (버퍼 시간 최소 60초)
커스텀 코드 작성
가능
불가능
자동 스케일링
가능
자동 스케일링 지원
데이터 스토리지 기간
1일부터 365일까지
데이터 저장 미지원
데이터 소비 및 처리
수신자 / 소비자 코드 작성 필요
관리형 서비스로 자동 처리
Shard 분할 및 병합
수동 또는 자동
자동
데이터 저장소
데이터 스트림 내부 저장소
S3, Redshift, ES, 외부/사용자 정의 HTTP 엔드포인트
데이터 리플레이 기능
지원
미지원
 
289. Kinesis에 대한 데이터 정렬 대 SQS FIFO
Kinesis Data Streams와 SQS FIFO의 주문 처리 비교는 다음과 같습니다:
Kinesis Data Streams:
  • 평균적으로 각 Shard당 20 대의 트럭이 있을 것으로 가정합니다.
  • 각 Shard 내에서 트럭 데이터의 순서가 보장됩니다.
  • 병렬로 실행 가능한 최대 소비자 수는 5입니다.
  • 초당 최대 5MB의 데이터를 수신할 수 있습니다.
SQS FIFO:
  • 하나의 SQS FIFO 큐만 사용할 수 있습니다.
  • 100 개의 그룹 ID가 생성됩니다. 각 그룹 ID는 하나의 트럭과 연결됩니다.
  • 최대 100개의 소비자를 가질 수 있습니다. (100개의 그룹 ID로 인해)
  • 초당 최대 300개의 메시지를 처리할 수 있습니다. (배치 처리를 사용할 경우 3000개)
Kinesis Data Streams는 각 Shard 내에서 데이터를 순서대로 처리하기 때문에 트럭 데이터의 순서를 보장합니다. 그러나 병렬로 실행 가능한 소비자 수는 Shard 수에 제한되므로 최대 5개의 소비자만 동시에 처리할 수 있습니다.
SQS FIFO는 단일 큐에 모든 트럭 데이터가 저장되며, 각 트럭은 고유한 그룹 ID와 연결됩니다. 따라서 최대 100개의 소비자를 가질 수 있으며, 그룹 ID당 하나의 소비자가 됩니다. SQS FIFO는 초당 최대 300개의 메시지를 처리할 수 있지만, 배치 처리를 사용하면 3000개의 메시지를 처리할 수 있습니다.
이를 통해 Kinesis Data Streams는 순서가 중요한 데이터 스트림 처리에 적합하며, SQS FIFO는 대량의 메시지 처리와 병렬 소비자 지원에 적합합니다. 사용 사례 및 요구 사항에 따라 적절한 서비스를 선택할 수 있습니다.
290. SQS 대 SNS 대 Kinesis
notion image
297. Lambda 및 Application Load Balancer
  • ALB Multi-header values : 배열로 처리함
notion image
305. Lambda 이벤트 소스 매핑
  • kinesis, s3, dynamoDb가 Lambda의 이벤트 소스 매퍼라는 걸 알면되는 것인가?
  • 시험 전에 다시 확인 필요
 
306. Lambda 이벤트 소스 매핑 실습(SQS)
  • SQS 예제 - Lambda와 SQS를 생성해서 트리거를 SQS에 걸고, Lambda에 배치를 걸면 폴링 하면서 SQS의 이벤트를 처리한다.
  • Kinesis 예제 - DLQ 처리 (삭제 함), 샤드 당 동시 처리 수,
307. [DVA-C02] Lambda 이벤트 및 컨텍스트 객체 *
  • Eventbridge에 이벤트가 생성 됨
  • 이벤트를 lambda에 보냄
  • lambda에서 lambda 함수가 이벤트를 받음 : 이때 이 이벤트를 이벤트 객체라고 함
  • 이벤트 객체에는 이벤트 발생한 위치(서비스)와 데이터를 가지고 있음
  • lambda 함수의 두번 째 파라메터는 context 객체 인데, 함수의 메타 데이터(함수의 AWS 요청 ID, 함수 이름, 함수의 로그 그룹, 사용 가능한 메모리 등)를 가지고 있음
  • 이벤트 객체는 JSON 형태의, 함수가 처리할 데이터를 갖고 있는 문서
  • 컨텍스트 객체는 런타임 환경과 호출 자체의 데이터를 가지고 있음
  • 런타임 과정에서 람다가 이 객체를 함수에 전달
notion image
 
311. Lambda 권한 - IAM 역할 및 리소스 정책 - 실습
  1. IAM 콘솔을 통해 Lambda 함수의 IAM 역할을 관리할 수 있다.
  1. 여러 가용한 Lambda 역할이 존재하며, 이들은 다양한 권한을 가지고 있다. 예를 들어, demo-Lambda-role은 로그 그룹 생성 및 CloudWatch 로그 이벤트 전송 권한을 가지고 있다.
  1. Lambda 함수가 비동기 유형의 이벤트를 받을 때, Resource-based policy를 통해 호출 권한을 설정할 수 있다. 예를 들어, Elastic Load Balancer를 통해 Lambda 함수를 호출할 수 있는 권한을 설정할 수 있다.
  1. Lambda 함수가 S3 버킷 또는 EventBridge를 통해 호출될 때, 해당 리소스에 대한 호출 권한을 설정할 수 있다.
  1. Lambda 함수가 SQS 대기열에서 메시지를 폴링하고 처리하는 경우, Lambda SQS 대기열 실행 역할을 사용하여 실행 권한을 설정할 수 있다.
  1. Lambda 함수는 리소스 기반 정책을 통해 호출되거나 IAM 역할에 연결된 권한을 통해 호출될 수 있다.
 
가장 중요한 부분은 Lambda 함수가 IAM 역할을 필요로 한다는 점입니다. 모든 Lambda 함수는 IAM 역할을 사용하여 권한을 부여받아야 합니다. 또한, 비동기 유형의 호출이 Lambda 함수 호출의 소스임을 이해하는 것이 중요합니다. Lambda 함수는 호출을 받을 수도 있고, 다른 리소스를 호출할 수도 있습니다. 이러한 권한은 리소스 기반 정책이나 해당 Lambda 함수에 연결된 IAM 역할을 수정하여 설정할 수 있습니다.
314. Lambda 모니터링 및 X-Ray 추적 *
  • Ensure Lambda Function has a correct IAM Execution Role
    • The managed policy is called AWSXRayDaemon WriteAccess
  • Environment variables to communicate with X-Ray
    • X_AMZN_TRACE_ID: contains the tracing header
    • AWS_XRAY_CONTEXT_MISSING: by default, LOG_ERROR
    • AWS_XRAY_DAEMON_ADDRESS: the X-Ray Daemon IP_ADDRESS:PORT
    •  
316. [DVA-C02] Lambda@Edge 및 CloudFront 함수
notion image
notion image
317. VPC의 Lambda
  • Lambda는 인터넷을 연결할 수 없기 때문에 VPC안에 public subnet을 지정해도 인터넷이 안됨
  • 그래서 private subnet에 넣고 public subnet에 있는 nat gateway를 연하고 nat gateway는 internet gateway에 연결하면 lambda가 인터넷이 된다.
  • dynamoDB는 vpc endpoint gateway 통해서 연결하면 된다.
319. Lambda 함수 성능
  • Lambda 성능 향상 ⇒ Ram 증가
  • 수행 시간은 최대 15분 ⇒ 15분 넘으면 fargate 등으로
  • /tmp 공간을 사용할 수 있음
    notion image
    323. [DVA-C02] Lambda 파일 시스템 마운트 *
    Lambda – Storage Options
    Ephemeral Storage /tmp
    Lambda Layers
    S3
    EFS
    Max. Size
    10,240 MB
    5 layers per function up to 250MB total
    Elastic
    Elastic
    Persistence
    Ephemeral
    Durable
    Durable
    Durable
    Content
    Dynamic
    Static
    Dynamic
    Dynamic
    Storage Type
    File System
    Archive
    Object
    File System
    Operations supported
    any File System operation
    Immutable
    Atomic with Versioning
    any File System operation
    Pricing
    Included in Lambda
    Included in Lambda
    Storage + Requests + Data Transfer
    Storage + Data Transfer + Throughput
    Sharing/Permissions
    Function Only
    IAM
    IAM
    IAM + NFS
    Relative Data Access Speed from Lambda
    Fastest
    Fastest
    Fast
    Very fast
    Shared Across All Invocations
    No
    Yes
    Yes
    Yes
    일회성 스토리지 /tmp
    람다 레이어
    S3
    EFS
    최대 크기
    10,240 MB
    함수당 5개의 레이어, 총 250MB까지
    탄력적
    탄력적
    지속성
    일시적
    내구성
    내구성
    내구성
    내용
    동적
    정적
    동적
    동적
    스토리지 유형
    파일 시스템
    아카이브
    객체
    파일 시스템
    지원 작업
    모든 파일 시스템 작업
    변경 불가능
    버전 관리와 함께 원자적
    모든 파일 시스템 작업
    가격 책정
    람다에 포함
    람다에 포함
    스토리지 + 요청 + 데이터 전송
    스토리지 + 데이터 전송 + 처리량
    공유 / 권한
    함수 전용
    IAM
    IAM
    IAM + NFS
    람다에서 상대적인 데이터 액세스 속도
    가장 빠름
    가장 빠름
    빠름
    매우 빠름
    모든 호출에서 공유
    아니오
    324. Lambda 동시성
    • Lambda 함수의 동시성 제한은 계정 전체에 적용되므로, 하나의 함수가 제한을 초과하면 다른 함수도 영향을 받을 수 있다는 점을 명심해야 합니다.
    • 예약된 동시성(Reserved concurrency) - 예약된 동시성은 함수에 할당하려는 최대 동시 인스턴스 수입니다. 함수에 예약된 동시성이 있는 경우, 다른 함수는 해당 동시성을 사용할 수 없습니다. 함수에 대한 예약된 동시성 구성에 대한 요금은 없습니다.
    • 프로비저닝된 동시성(Provisioned concurrency) - 프로비저닝된 동시성은 함수에 할당하려는 미리 초기화된 실행 환경의 수입니다. 이러한 실행 환경은 들어오는 함수 요청에 즉시 응답할 준비가 되어 있습니다. 프로비저닝된 동시성을 구성하는 것은 AWS 계정에 요금이 부과됩니다.
    330. [DVA-C02] Lambda 컨테이너 이미지
    람다 컨테이너 이미지 • ECR에서 최대 10GB까지의 컨테이너 이미지로 람다 함수 배포 • 복잡한 종속성, 큰 종속성을 컨테이너에 포함 • Python, Node.js, Java, .NET, Go, Ruby용 기본 이미지 제공 • 람다 런타임 API를 구현하는 한 사용자 정의 이미지 생성 가능 • 람다 런타임 인터페이스 에뮬레이터를 사용하여 로컬에서 컨테이너 테스트 • 앱 빌드를 위한 통합 워크플로우
    예시: AWS에서 제공하는 기본 이미지에서 빌드
    # 람다 런타임 API를 구현한 이미지 사용 FROM amazon/aws -lambda -nodejs:12 # 애플리케이션 코드 및 파일 복사 COPY app.js package*.json ./ # 컨테이너 내에서 종속성 설치 RUN npm install # 람다 함수 호출 시 실행할 함수 CMD ["app.lambdaHandler"]
    람다 컨테이너 이미지 - 최적의 방법 • 컨테이너 이미지 최적화 전략: • AWS 기본 이미지 사용 • 안정적이며 Amazon Linux 2에서 빌드되어 Lambda 서비스에 캐시됨 • 다중 스테이지 빌드 사용 • 코드를 큰 중간 이미지에서 빌드하고 최종 컨테이너 이미지에 필요한 아티팩트만 복사한 다음 중간 단계를 삭제 • 안정적인 이미지에서 빌드 • Dockerfile에서 가장 빈번한 변경 사항을 최대한 늦게 수행 • 큰 레이어를 가진 함수에 대한 단일 레포지토리 사용 • ECR은 컨테이너 이미지의 각 레이어를 업로드하기 전에 비교하여 중복 업로드 및 저장을 방지 • 람다 함수(최대 10GB) 업로드에 사용
    331. Lambda 버전 및 Alias
    • AWS Lambda 별칭 • 별칭은 람다 함수 버전을 가리키는 "포인터"입니다.
    • "dev", "test", "prod" 별칭을 정의하고 다른 람다 버전을 가리킬 수 있습니다.
    • 별칭은 가변적입니다.
    • 별칭은 람다 함수에 가중치를 할당하여 카나리 배포를 가능하게 합니다.
    • 별칭은 이벤트 트리거/대상의 안정적인 구성을 가능하게 합니다.
    • 별칭은 고유한 ARN을 가집니다.
    • 별칭은 다른 별칭을 참조할 수 없습니다.
    • Lambda 함수의 버전과 별칭은 별칭이 다른 별칭을 참조할 수 없으며, 버전만 참조할 수 있다는 것이 중요합니다.
    333. [DVA-C02]Lambda 및 CodeDeploy
    • 이름 (필수) - 배포할 람다 함수의 이름
    • Alias (필수) - 람다 함수에 대한 별칭의 이름
    • CurrentVersion (필수) - 현재 람다 함수 트래픽이 연결된 버전
    • TargetVersion (필수) - 람다 함수 트래픽이 이동하는 버전
     
    notion image
    334. [DVA-C02] Lambda 함수 URL
    • 람다 함수 URL
      • Lambda 함수 전용 HTTP(S) 엔드포인트
      • 고유한 URL 엔드포인트가 생성됩니다(변경되지 않음)
      • https://<url-id>.lambda-url.<region>.on.aws (듀얼 스택 IPv4 & IPv6)
      • 웹 브라우저, curl, Postman 또는 모든 HTTP 클라이언트로 호출 가능
      • 함수 URL은 공개 인터넷을 통해서만 접근 가능
      • PrivateLink를 지원하지 않습니다(Lambda 함수는 지원함)
      • 리소스 기반 정책 및 CORS 구성을 지원합니다
      • 모든 함수 별칭 또는 $LATEST에 적용 가능(다른 함수 버전에는 적용 불가)
      • AWS 콘솔 또는 AWS API를 사용하여 생성 및 구성 가능
      • 예약된 동시성을 사용하여 함수를 제한할 수 있습니다
    • 람다 - 함수 URL 보안
      • AuthType NONE - 공개 및 인증되지 않은 액세스 허용
      • AuthType AWS_IAM - IAM을 사용하여 요청을 인증 및 권한 부여
        • Principal의 Identity-based 정책 및 Resource-based 정책 모두 평가됨
        • Principal은 lambda:InvokeFunctionUrl 권한을 가지고 있어야 함
        • 동일 계정 - Identity-based 정책 또는 Resource-based 정책을 ALLOW로 설정
        • 다른 계정 - Identity-based 정책 및 Resource-based 정책을 ALLOW로 설정
        •  
    336. [DVA-C02] Lambda - CodeGuru 연동하기
    • CodeGuru Profiler을 사용하여 Lambda 함수의 런타임 성능에 대한 인사이트를 얻으세요.
    • CodeGuru는 Lambda 함수를 위한 프로파일러 그룹을 생성합니다.
    • Java 및 Python 런타임을 지원합니다.
    • AWS Lambda 콘솔에서 활성화할 수 있습니다.
    • 활성화하면 Lambda가 다음을 추가합니다:
      • 함수에 CodeGuru Profiler 레이어
      • 함수에 환경 변수
      • 함수에 AmazonCodeGuruProfilerAgentAccess 정책
    337. Lambda 제한 *
    AWS Lambda 한도 - 지역별
    • 실행:
      • 메모리 할당: 128 MB - 10GB (1 MB 증분)
      • 최대 실행 시간: 900 초 (15 분)
      • 환경 변수 (4 KB)
      • "함수 컨테이너"의 디스크 용량 (/tmp에서): 512 MB에서 10GB까지
      • 동시성 실행: 1000 (증가 가능)
    • 배포:
      • Lambda 함수 배포 크기 (압축 .zip): 50 MB
      • 압축 풀린 배치 크기 (코드 + 종속성): 250 MB
      • 시작시 다른 파일을로드하기 위해 /tmp 디렉토리를 사용할 수 있습니다.
      • 환경 변수 크기: 4 KB
     
    338. Lambda 모범 사례
    • 함수 핸들러 외부에서 고객 요구 사항을 수행합니다.
      • 함수 핸들러 외부에서 데이터베이스에 연결합니다.
      • 함수 핸들러 외부에서 AWS SDK를 초기화합니다.
      • 함수 핸들러 외부에서 종속성이나 데이터 세트를 가져옵니다.
    • 환경 변수를 사용하여 다음을 수행합니다.
      • 데이터베이스 연결 문자열, S3 버킷 등을 코드에 넣지 마세요.
      • 암호, 민감한 값 등은 KMS를 사용하여 암호화할 수 있습니다.
    • 실행에 필요한 최소한의 패키지 크기로 배포 패키지 크기를 최소화합니다.
      • 필요한 경우 함수를 분할합니다.
      • AWS Lambda 제한 사항을 기억합니다.
      • 필요한 경우 레이어를 사용합니다.
    • 재귀 코드를 사용하지 마세요. 람다 함수 자체를 호출하지 마세요.
    340. DynamoDB 개요
    notion image
    notion image
    • Primary key 또는 Partition key 등 cardinality가 높은 것을 선택해야 함
    • cardinality : 카디널리티는 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표
    342. DynamoDB WCU 및 RCU - 처리량 *
    DynamoDB - 쓰기 용량 단위 (WCU)
    • 하나의 쓰기 용량 단위 (WCU)는 최대 1KB의 항목에 대해 초당 하나의 쓰기를 나타냅니다.
    • 항목이 1KB보다 큰 경우, 더 많은 WCUs가 소비됩니다.
    예 1 : 우리는 항목 크기가 2KB인 초당 10개의 항목을 쓰기로 합니다.
    ⇒ 10개의 항목 * 2KB / 1KB = 20WCUs
    예 2 : 우리는 항목 크기가 4.5KB인 초당 6개의 항목을 쓰기로 합니다.
    ⇒ 6개의 항목 * 5KB / 1KB = 30WCUs
    예 3 : 우리는 항목 크기가 2KB인 분당 120개의 항목을 쓰기로 합니다.
    ⇒ 120개의 항목 / 60초 * 2KB / 1KB = 4WCUs
     
    강력한 일관성 읽기 (Strongly Consistent Read) 대 기존성 일관성 읽기 (Eventually Consistent Read)
    • 기존성 일관성 읽기 (default):
      • 쓰기 작업 후 바로 읽기 작업을 수행하면, 복제로 인해 오래된 데이터를 얻을 수 있다.
    • 강력한 일관성 읽기:
      • 쓰기 작업 후 바로 읽기 작업을 수행하면, 올바른 데이터를 얻을 수 있다.
      • API 호출(GetItem, BatchGetItem, Query, Scan)에서 "ConsistentRead" 매개변수를 True로 설정한다.
      • RCU의 두 배를 소비한다.
      •  
    DynamoDB - Read Capacity Units (RCU)
    • 1개의 Read Capacity Unit (RCU)는 크기가 4 KB 이하인 항목의 1 초당 강력하게 일관된 읽기 또는 2 초당 최종적으로 일관된 읽기를 나타냅니다.
    • 항목이 4 KB보다 큰 경우 더 많은 RCUs가 소비됩니다.
    예 1 : 4 KB 크기의 항목으로 1 초당 강력하게 일관된 읽기 10 회
    10 * 4KB / 4KB = 10 RCUs
    예 2 : 12 KB 크기의 항목으로 1 초당 최종적으로 일관된 읽기 16 회
    16 / 2 * 12KB / 4KB = 24RCUs
    예 3 : 6 KB 크기의 항목으로 1 초당 강력하게 일관된 읽기 10 회
    ⇒ 10 * 8KB / 4KB = 20RCUs
     
    344. [DVA-C02] DynamoDB 기본 API
    • UnprocessedItems : BatchWriteItem 작업 또는 BatchGetItem 작업에서 처리되지 않은 항목
    346. [DVA-C02] DynamoDB - 조건부 쓰기
    • 참고: 필터 표현식은 읽기 쿼리의 결과를 필터링하는 데 사용되며, 조건 표현식은 쓰기 작업에 사용됩니다.
    • For PutItem, UpdateItem, DeleteItem, and BatchWriteItem
      • Specify a Condition expression to determine which items should be modified
      • Use attribute_exists
      • Use attribute_not_exists
      • Use attribute_type
      • Use contains (for string)
      • Use begins_with (for string)
      • Use ProductCategory IN (:cat1, :cat2) and Price between :low and :high
      • Use size (string length)
    347. DynamoDB 인덱스(GSI + LSI) *
    • Local Secondary Index (LSI)
      • 테이블의 대체 정렬 키 (기본 테이블과 동일한 파티션 키)
      • 정렬 키는 하나의 스칼라 속성 (문자열, 숫자 또는 이진)으로 구성됩니다.
      • 테이블당 최대 5개의 로컬 보조 인덱스
      • 테이블 생성 시 정의해야 함
      • 속성 프로젝션 - 기본 테이블의 일부 또는 모든 속성을 포함할 수 있습니다. (KEYS_ONLY, INCLUDE, ALL))
        • notion image
    • Global Secondary Index (GSI)
      • 기본 테이블의 대체 기본키 (HASH 또는 HASH+RANGE)
      • 비-키 속성에 대한 쿼리 속도 향상
      • 인덱스 키는 스칼라 속성 (문자열, 숫자 또는 이진)으로 구성됩니다.
      • 속성 프로젝션 - 기본 테이블의 일부 또는 전체 속성 (KEYS_ONLY, INCLUDE, ALL)
      • 인덱스에 대해 RCUs 및 WCUs를 제공해야 함
      • 테이블 생성 후 추가/수정 가능합니다.
        • notion image
    • DynamoDB – 인덱스 및 스로틀링
      • 전역 보조 인덱스 (GSI):
        • GSI에서 쓰기가 스로틀링되면 주 테이블도 스로틀링됩니다!
        • 메인 테이블의 WCU가 정상이더라도
        • GSI 파티션 키를 신중하게 선택하세요!
        • WCU 용량을 신중하게 할당하세요!
      • 지역 보조 인덱스 (LSI):
        • 메인 테이블의 WCUs 및 RCUs를 사용합니다.
        • 특별한 스로틀링 고려사항이 없습니다.
    350. DynamoDB 낙관적 잠금
    • DynamoDB - 낙관적 락킹
      • DynamoDB는 "조건부 쓰기"라는 기능을 갖추고 있습니다.
      • 업데이트/삭제하기 전에 항목이 변경되지 않았는지 확인하는 전략
      • 각 항목에는 버전 번호로 작용하는 속성이 있습니다.
     
    351. DynamoDB DAX
    • ElastiCache : Store Aggregation Result
    • DynamoDB Accelerator (DAX) :
      • Individual objects cache
      • Query & Scan cache
    notion image
    353. DynamoDB 스트림
    notion image
    • 스트림에 작성될 정보를 선택하는 기능:
      • KEYS_ONLY - 수정된 항목의 키 속성만
      • NEW_IMAGE - 수정된 후 항목 전체
      • OLD_IMAGE - 수정 전 항목 전체
      • NEW_AND_OLD_IMAGES - 항목의 새로운 이미지와 이전 이미지 모두
    • DynamoDB 스트림은 Kinesis 데이터 스트림과 마찬가지로 샤드로 구성됩니다.
    • 샤드를 프로비저닝하지 않으며 AWS에서 자동화됩니다.
    • 스트림을 활성화한 후 레코드는 역적으로 스트림에 채워지지 않습니다.
    356. DynamoDB CLI *
    • --projection-expression: 검색할 하나 이상의 속성
    • --filter-expression: 반환되기 전에 항목을 필터링
    • 일반 AWS CLI 페이지네이션 옵션 (예: DynamoDB, S3 등)
      • --page-size: 하나의 API 호출 대신 AWS CLI가 전체 항목 목록을 더 큰 수의 API 호출로 검색하도록 지정합니다 (기본값: 1000 항목)
      • --max-items: CLI에서 표시할 최대 항목 수 (NextToken 반환)
      • --starting-token: 다음 항목 집합을 검색하기 위해 마지막 NextToken을 지정합니다
      •  
    357. DynamoDB 트랜잭션 *
    DynamoDB Transactions – Capacity Computations
    Example1: 3 Transactional writes per second, with item size 5 KB
    ⇒ 3 Transaction * 5KB / 1KB(write cost) * 2 Transactional cost = 30 WCUs
    Example 2: 5 Transaction reads per second , with item size 5 KB
    ⇒ 5 Transaction * 8KB / 4KB(read cost) * 2 Transactional cost = 20 RCUs
    358. DynamoDB 세션 상태
    • 보통 세션 상태 캐시로 DynamoDB 사용 : 아래 대비해서 장점이 있음
    • ElasticCache 대비
      • ElasticCache는 인메모리이지만 DynamoDB는 서버리스입니다.
      • 둘 다 키/값 저장소입니다.
    • EFS 대비
      • EFS는 네트워크 드라이브로 EC2 인스턴스에 연결되어야 합니다.
    • EBS 및 인스턴스 스토어 대비
      • EBS 및 인스턴스 스토어는 공유 캐싱이 아닌 로컬 캐싱에만 사용할 수 있습니다.
    • S3 대비
      • S3는 더 높은 대기 시간을 가지며 작은 객체에 적합하지 않습니다.
     
    361. S3를 사용한 DynamoDB 패턴
    notion image
    notion image
    362. DynamoDB 작업
    • DB 정리는 삭제하고 다시 만드는게 빠르고 효율적
    • DB 복사 방법은 DATA Pipeline으로 EMR 사용하는 것이 좋음
    notion image
    367. [DVA-C02] API 게이트웨이 단계 및 배포
    368. API Gateway 단계 및 배포 실습 *
    aws API Gateway 단계 및 배포 실습가 시험에 나온다는데 어떻게 나오는지 얘기가 없다..
    371. API Gateway Canary 배포 실습
     
    • API Gateway 콘솔에서 직접 프로모트(promote) 버튼을 클릭하여 Canary 배포를 활성화하는 방법입니다. 이렇게 프로모트를 통해 새로운 API 버전이 활성화되면, 해당 버전만 얻을 수 있게 됩니다. 기존의 안정적인 버전과는 별도로 새로운 Canary 버전이 적용되어, 새로운 버전으로 라우팅된 트래픽만 해당 기능을 테스트하게 됩니다.
    • 이렇게 Canary 배포를 통해 신규 기능의 안정성과 성능을 테스트한 후에 테스트가 완료되면, 새로운 API 버전을 100%로 라우팅하여 전체 서비스에 적용할 수 있습니다. 이러한 프로세스를 통해 서비스의 안정성을 유지하면서도 새로운 기능을 효과적으로 테스트하고 배포할 수 있습니다.
     
    372. [DVA-C02] API 게이트웨이 통합 유형 및 매핑 *
    • 시험 출제 : 매핑 템플릿으로 API 게이트웨이를 통해 클라이언트와 SOAP API를 통합하는 방법
    1. 요청에서 데이터를 추출합니다. 경로, 페이로드 또는 헤더 중 하나
    1. 요청 데이터를 기반으로 SOAP 메시지를 구성합니다 (매핑 템플릿)
    1. SOAP 서비스를 호출하고 XML 응답을 수신합니다.
    1. XML 응답을 원하는 형식 (예 : JSON)으로 변환하고 사용자에게 응답합니다.
     
    374. [DVA-C02] API 게이트웨이 Swagger 및 개방형 API 3.0 *
    notion image
    이 부분이 시험에 나온다면 어떻게 나올지 모르겠다.
    377. API 게이트웨이 사용 계획 및 API 키
    • API 키 : x-api-key 헤더에 추가
    378. [DVA-C02] API 게이트웨이 모니터링, 로깅 및 추적
    • API 게이트웨이 - 오류
      • 4xx는 클라이언트 오류를 의미합니다.
        • 400: 잘못된 요청
        • 403: 액세스 거부, WAF 필터링
        • 429: 할당량 초과, 스로틀링
      • 5xx는 서버 오류를 의미합니다.
        • 502: Bad Gateway 예외, 일반적으로 Lambda 프록시 통합 백엔드에서 호환되지 않는 출력이 반환되거나 과도한 부하로 인해 순서가 잘못된 호출에 대해 발생합니다.
        • 503: Service Unavailable 예외
        • 504: 통합 실패 - ex Endpoint Request Timed-out Exception API 게이트웨이 요청은 최대 29 초 후에 시간 초과됩니다.
        •  
    380. API 게이트웨이 인증 및 권한 부여
    • API 게이트웨이 - 보안 - 요약
      • • IAM:
        • AWS 계정 내에 이미 있는 사용자 / 역할에 대해 우수함, 교차 계정을 위한 리소스 정책 추가 가능
        • 인증 + 권한 부여 처리
        • 시그니처 v4 활용
      • 사용자 정의 인증자:
        • 제3자 토큰에 적합함
        • 반환되는 IAM 정책의 유연성이 높음
        • 람다 함수에서 인증 검증 및 권한 부여 처리
        • 람다 함수 실행당 비용 청구, 결과는 캐시에 저장됨
      • Cognito 사용자 풀:
        • 사용자 풀 직접 관리 가능 (Facebook, Google 로그인 등을 지원할 수 있음)
        • 사용자 정의 코드 작성 불필요
        • 백엔드에서 권한 부여 구현 필요
    381. API 게이트웨이 REST API 대 HTTP API
    • Rest 대비 HTTP API가 저렴한 비용의 대체 서비스, 프록시 통합만을 지원하며, 사용량 설정과 API 키가 없으
     
    382. API 게이트웨이 웹 소켓 API
    • WebSocket API는 양방향 통신과 라우팅을 위한 것이라는 점만 알고 있으면 됩니다
    383. API 게이트웨이 웹 소켓 API 실습
    • 라우팅 표시 식을 알아두어야 함
    notion image
    386. SAM 개요
    • sam package와 sam deploy만 차례로
    notion image
     
    388. 첫 번째 SAM 프로젝트 생성 *
    notion image
    Transform: ‘AWS::Serverless 2016-10-31’ ⇒ SAM YAML을 뜻함
    396. SAM 섹션 요약 *
    • AWS SAM(Serverless Application Model)은 CloudFormation 위에 구축된 프레임워크입니다.
    • SAM은 Transform 및 Resources 섹션을 필요로 합니다.
    • 알아야 할 명령어:
      • sam build: 종속성을 가져오고 로컬 배포 아티팩트를 생성합니다.
      • sam package: Amazon S3에 패키지를 업로드하고 CF 템플릿을 생성합니다.
      • sam deploy: CloudFormation으로 배포합니다.
    • 쉬운 IAM 정책 정의를 위한 SAM 정책 템플릿
    • SAM은 Lambda 별칭에 배포하기 위해 CodeDeploy와 통합되어 있습니다.
    403. [DVA-C02] CDK - 유닛 테스트
    • 두 가지 유형의 테스트:
      • 세부 단계 검증 (일반적) - CloudFormation 템플릿의 특정 측면을 테스트합니다 (예 : 리소스가이 속성을이 값으로 가지고 있는지 확인)
      • 스냅 샷 테스트 - 합성 된 CloudFormation 템플릿을 이전에 저장된 기준선 템플릿과 비교합니다.
    • 템플릿 가져 오기
      • Template.fromStack (MyStack) : CDK에서 빌드 된 스택
      • Template.fromString (MyString) : CDK 외부에서 빌드 된 스택
    406. [DVA-C02] Cognito 사용자 풀 실습
    • Cognito Hosted UI를 제공함
    407. [DVA-C02] Cognito 사용자 풀 기타
    • CUP can invoke a Lambda function synchronously on these triggers:
      • User Pool Flow
        Operation
        Description
        Authentication Events
        Pre Authentication Lambda Trigger
        Custom validation to accept or deny the sign-in request
        Post Authentication Lambda Trigger
        Event logging for custom analytics
        Pre Token Generation Lambda Trigger
        Augment or suppress token claims
        Sign-Up
        Pre Sign-up Lambda Trigger
        Custom validation to accept or deny the sign-up request
        Post Confirmation Lambda Trigger
        Custom welcome messages or event logging for custom analytics
        Migrate User Lambda Trigger
        Migrate a user from an existing user directory to user pools
        Messages
        Custom Message Lambda Trigger
        Advanced customization and localization of messages
        Token Creation
        Pre Token Generation Lambda Trigger
        Add or remove attributes in Id tokens
    • CUP – Hosted UI Custom Domain
      • For custom domains, you must create an ACM certificate in us-east-1
      • The custom domain must be defined in the “App Integration” section
     
    409. Cognito 자격 증명 풀
    • "사용자"를 위해 ID를 가져와서 일시적인 AWS 자격 증명을 얻으세요.
    • 신원 풀(예: 신원 소스)은 다음을 포함할 수 있습니다:
      • 공공 공급자 (Amazon 로그인, Facebook, Google, Apple)
      • Amazon Cognito 사용자 풀의 사용자
      • OpenID Connect 공급자 및 SAML 신원 공급자
      • 개발자 인증 ID(사용자 정의 로그인 서버)
      • Cognito Identity Pools는 인증되지 않은 (게스트) 액세스를 허용합니다.
    • 사용자는 직접 AWS 서비스에 액세스하거나 API Gateway를 통해 액세스할 수 있습니다.
      • 자격증명에 적용되는 IAM 정책은 Cognito에서 정의됩니다.
      • 사용자 ID에 따라 세분화된 제어를 위해 사용자 정의될 수 있습니다.
    • 아래 아키텍처를 이해하면 됨
    notion image
    Cognito Identity Pools – Policy variable on S3
    notion image
    Cognito Identity Pools – DynamoDB
    notion image
    412. 단계 함수 개요
    • Step Function - States
      • 선택 상태 - 분기점 (또는 기본 분기점)으로 보낼 조건을 테스트합니다.
      • 실패 또는 성공 상태 - 실패 또는 성공으로 실행을 중단합니다.
      • 통과 상태 - 작업을 수행하지 않고 입력을 출력으로 전달하거나 일부 고정 데이터를 삽입합니다.
      • 대기 상태 - 일정 시간 동안 또는 지정된 시간 / 날짜까지 지연을 제공합니다.
      • 매핑 상태 - 동적으로 단계를 반복합니다.
      • 병렬 상태 - 병렬 실행 분기를 시작합니다.
    • Visual workflow in Step Functions
      • notion image
      414. 단계 함수 - 오류 처리
      • ResultPath : 입력값으로부터의 오류를 다음 태스크의 결과 값으로 어떻게 전달할 것인지를 나타냅니다
        • ⇒ $.error
      416. [DVA-C02] 단계 함수 - 작업 토큰 대기
      notion image
      418. [DVA-C02] Step Functions -표준 대 익스프레스
      notion image
      • 비동기식 익스프레스 워크플로 : 최소 1회 실행 보장 모델
      • 동기식 익스프레스 워크플로 : 최대 1회 실행 모델이라는 것
      419. [DVA-C02] AppSync 개요
      • AppSync : GraphQL 또는 WebSockets이라는 점과 모바일 데이터, 오프라인 동기화에 사용될 수 있다는 점만 알면 됩니다
      • Cognito Sync ⇒ AppSync 대체
      421. [DVA-C02] AWS Amplify 개요
      notion image
      notion image
      423. STS 개요
      AWS STS - 보안 토큰 서비스
      • AWS 리소스에 대한 제한적이고 일시적인 액세스 권한을 부여할 수 있습니다 (최대 1시간).
      • AssumeRole: 계정 내 또는 크로스 계정 내에서 역할을 가정합니다.
      • GetSessionToken: 사용자 또는 AWS 계정 루트 사용자의 MFA를 위한 것입니다.
      • GetCallerIdentity: API 호출에 사용된 IAM 사용자 또는 역할에 대한 세부 정보를 반환합니다.
      • DecodeAuthorizationMessage: AWS API가 거부될 때 오류 메시지를 디코딩합니다.
      notion image
      424. 고급 IAM *
      Example 1 • IAM Role attached to EC2 instance, authorizes RW to “my_bucket” • No S3 Bucket Policy attached • => EC2 instance can read and write to “my_bucket”
      Example 2 • IAM Role attached to EC2 instance, authorizes RW to “my_bucket” • S3 Bucket Policy attached, explicit deny to the IAM Role • => EC2 instance cannot read and write to “my_bucket”
      Example 3 • IAM Role attached to EC2 instance, no S3 bucket permissions • S3 Bucket Policy attached, explicit RW allow to the IAM Role • => EC2 instance can read and write to “my_bucket”
      Example 4 • IAM Role attached to EC2 instance, explicit deny S3 bucket permissions • S3 Bucket Policy attached, explicit RW allow to the IAM Role • => EC2 instance cannot read and write to “my_bucket”
      425. 사용자에게 AWS 서비스에 역할을 전달할 수 있는 권한 부여 *
      { "Version": "2012-10-17", "Id": "Secret Policy", "Statement": [ { "Sid": "EC2", "Effect": "Allow", "Action": "ec2:*", "Resource": "*" }, { "Sid": "Passrole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam:::role/RDS-*" } ] }
      ⇒ IAM 역할이 RDS로 시작하는 경우 EC2에 할당할 수 있다.
      💡
      여러분의 AWS 계정은 이제 200명의 IAM 사용자로 증가하고 있으며 각 사용자는 users-data라는 S3 버킷에 자신의 데이터를 가지고 있습니다. 각 IAM 사용자에 대해 접두사 /home/을 사용하여 S3 버킷에 개인 공간을 제공하려고 합니다.<username> , 읽기/쓰기 액세스 권한이 있습니다. 이 작업을 어떻게 효율적으로 수행할 수 있습니까?
      ⇒ 동적 변수를 이용하여 관리형으로 IAM 사용자 그룹에 연결
      426. AWS 디렉터리 서비스
      notion image
      429. [DVA-C02] KMS 개요
      • AWS KMS의 장점은 CloudTrail을 통해 키를 사용하기 위해 수행된 모든 API 호출을 검사할 수 있다
      431. KMS 암호화 패턴 및 봉투 암호화
      KMS 대칭 암호화 - API 요약
      • 암호화 : KMS를 통해 최대 4KB의 데이터를 암호화합니다.
      • GenerateDataKey : 고유 대칭 데이터 키 (DEK)를 생성합니다.
        • 데이터 키의 평문 복사본을 반환합니다.
        • 그리고 지정한 CMK로 암호화된 복사본을 반환합니다.
      • GenerateDataKeyWithoutPlaintext:
        • 언젠가 사용할 DEK를 생성합니다 (즉시 사용 불가)
        • 지정한 CMK로 암호화된 DEK (나중에 Decrypt를 사용해야 함)
      • Decrypt : 최대 4KB의 데이터 (데이터 암호화 키 포함)를 복호화합니다.
      • GenerateRandom : 무작위 바이트 문자열을 반환합니다.
      441. Secrets Manager - 개요
      • 암호 저장, 암호의 순환, RDS와의 통합 ⇒ Secrets Manager
      443. [DVA-C02] 시크릿 매니저 - CloudFormation 통합
      notion image
      notion image
      446. CodeBuild 보안
      • CodeBuild > Create build project > vpc 선택 > Environment variable > Type : Secret Manger 선택
      447. [DVA-C02] AWS Nitro Enclaves
      • AWS에서 제공하는 보안 기능으로, 격리된 환경을 제공하여 민감한 데이터와 애플리케이션을 안전하게 보호하는 역할을 합니다.
      449. AWS SES
      • 시험 중 Email은 SES 이다.
      451. [DVA-C02] Amazon 아테나 - 개요
      • Amazon S3에서 서버리스 SQL 엔진을 사용해 데이터를 분석해야 할 경우 ⇒ 아테나
      • 비용을 아껴서 쿼리 ⇒ Amazon Athena에 적합한 데이터 포맷은 Apache Parquet과 ORC
      • Parquet과 ORC는 Glue 서비스를 이용해서 변환
       
      453. [DVA-C02] Amazon MSK - 개요
      notion image
      459. 정리 체크리스트
      • EC2 instances
      • ELB
      • 시작 구성
      • Auto Scaling Groups
      • Elastic IPs
      • 보안 그룹
      • EBS 볼륨
      • 키 페어
      • ECS 환경 (클러스터, 서비스, task def, ECR)
      • Elastic Beanstalk applications & environments
      • AWS Lambda 함수
      • S3 파일 & 버킷
      • RDS 데이터베이스
      • DynamoDB 테이블 & 인덱스
      • ElastiCache 클러스터
      • Route53
      • API Gateway
      • Kinesis 스트림
      • SNS 주제
      • SQS Queues
      • CodeCommit
      • CodeBuild
      • CodePipeline
      • CloudWatch Logs
      • CloudWatch Metrics
      • CloudWatch Dashboards
      • CloudWatch Alerts
      • CloudWatch Rules
      • CloudFormation Stacks
      • SSM 파라미터 스토어
      • IAM 사용자 / 그룹 / 역할 / 정책
      ** 마지막 확인 **
      • 내장 함수
        • !ImportValue- 다른 스택에서 내보낸 출력의 값을 반환합니다. 일반적으로 이 함수를 사용하여 스택 간 참조를 생성합니다.
          !Ref - 지정된 매개변수 또는 리소스의 값을 반환합니다.
          !GetAtt -템플릿의 리소스에서 속성 값을 반환합니다.
          !Sub - 입력 문자열의 변수를 지정한 값으로 대체합니다.
           
      • AWS Elastic Beanstalk 서비스의 배포 전략
        • 한 번에 모두(All at once) - 가장 빠른 배포 방법입니다. 단기간의 서비스 손실이 허용될 수 있고 빠른 배포가 중요한 경우에 적합합니다. 이 방법을 사용하면 Elastic Beanstalk에서 각 인스턴스에 새 애플리케이션 버전을 배포합니다. 그런 다음 웹 프록시 또는 애플리케이션 서버를 다시 시작해야 할 수 있습니다. 결과적으로 짧은 시간 동안 사용자가 애플리케이션을 사용할 수 없거나 가용성이 감소할 수 있습니다.
        • 롤링(Rolling) - 가동 중지를 방지하고 가용성 감소를 최소화하는 대신 배포 시간이 길어집니다. 완전한 서비스 손실이 허용될 수 없는 경우에 적합합니다. 이 방법을 사용하면 애플리케이션이 한 번에 한 인스턴스 배치로 사용자 환경에 배포됩니다. 배포 전반에 걸쳐 대부분의 대역폭이 유지됩니다.
        • 추가 배치를 사용한 롤링(Rolling with additional batch) - 가용성 감소를 방지하지만 배포 시간이 롤링 방법보다도 오래 걸립니다. 배포 전반에 걸쳐 동일한 대역폭을 유지해야 하는 경우에 적합합니다. 이 방법을 사용하면 Elastic Beanstalk에서 추가 인스턴스 배치를 시작한 다음 롤링 배포를 수행합니다. 추가 배치를 시작하는 데는 시간이 걸리며 배포 전반에 걸쳐 동일한 대역폭이 유지됩니다.
        • 변경 불가능(Immutable) - 기존 인스턴스를 업데이트하는 대신 새 애플리케이션 버전이 항상 새 인스턴스에 배포되도록 하는 더 느린 배포 방법입니다. 또한 배포가 실패할 경우 빠르고 안전하게 롤백할 수 있다는 추가 이점이 있습니다. 이 방법을 사용하면 Elastic Beanstalk에서 변경 불가능한 업데이트를 수행하여 애플리케이션을 배포합니다. 변경이 불가능한 업데이트에서 두 번째 Auto Scaling 그룹이 사용자 환경에서 시작되고 새 인스턴스가 상태 확인을 통과할 때까지 새 버전과 기존 버전이 함께 트래픽을 처리합니다.
        • 트래픽 분할(Traffic splitting) - canary 테스트 배포 방법입니다. 이전 애플리케이션 버전을 통해 나머지 트래픽을 계속 처리하면서 수신 트래픽의 일부를 사용하여 새 애플리케이션 버전의 상태를 테스트하려는 경우에 적합합니다.
      • 복구 중에 AWS CodeDeploy가 처음으로 배포하는 대상 ⇒ 실패한 인스턴스
      • SQS : 최대 크기 256kb
      • 암호화
        • 고객이 제공한 암호화 키로 서버 측 암호화(SSE-C)를 사용하면 암호화 키를 설정할 수 있습니다. Amazon S3는 요청의 일부로 제공되는 암호화 키를 사용하여, 디스크에 기록할 때의 암호화와 객체에 액세스할 때의 복호화 모두 관리합니다.
        • SSE-KMS - AWS 키 관리 서비스(SSE-KMS)에 저장된 고객 마스터 키(CMK)를 사용한 서버 측 암호화는 SSE-S3와 유사합니다. SSE-KMS는 CMK가 언제, 누가 사용했는지 보여주는 감사 트레일을 제공합니다. 또한 고객 관리형 CMK를 생성 및 관리하거나 사용자, 서비스, 리전마다 고유한 AWS 관리형 CMK를 사용할 수 있습니다.
        • 클라이언트 측 암호화 - 데이터를 클라이언트 측에서 암호화하고 암호화된 데이터를 Amazon S3에 업로드할 수 있습니다. 이 경우, 암호화 프로세스, 암호화 키, 관련 도구를 관리해야 합니다.
        • SSE-S3 - Amazon S3 관리 키를 사용한 서버 측 암호화(SSE-S3)를 사용하는 경우, 각 객체는 고유 키로 암호화됩니다. 추가적인 안전장치로, 정기적으로 회전하는 마스터 키로 키 자체를 암호화합니다. 따라서 이 선택지는 올바르지 않습니다.
      • SWF :
        • SWF는 작업이 단 한 번만 할당되도록 보장하고, SQS는 메시지를 여러 번 전달할 수 있습니다.
        • SWF에는 작업 기반 API가 있고 SQS에는 메시지 기반 API가 있습니다.
        • SWF와 SQS 모두 애플리케이션 개발시 비동기 프로그래밍 옵션을 제공합니다.
      • X-Forwarded-For 헤더 : HTTP 또는 HTTPS 로드 밸런서를 사용할 때 클라이언트의 IP 주소를 식별하는 데 도움이 됩니다.
      • X-Forwarded-Proto 헤더 : X-Forwarded-Proto 요청 헤더는 클라이언트가 로드 밸런서에 연결할 때 사용한 프로토콜(HTTP 또는 HTTPS)을 식별하는 데 도움이 됩니다.
      • codedeploy 배포
        • 인플레이스 배포
          • 배포 그룹의 각 인스턴스에 있는 애플리케이션이 중지되고 최신 애플리케이션 개정판이 설치되며 새 버전의 애플리케이션이 시작되고 유효성 검사가 실행됩니다. 로드 밸런서를 사용하여 각 인스턴스의 등록을 배포 중에는 취소하고, 배포가 완료된 후 서비스로 복원되도록 할 수 있습니다.
        • 블루/그린 배포
          • 블루/그린 배포에서는, CodeDeploy가 애플리케이션의 최신 버전을 설치하는 새 인스턴스 집합을 프로비저닝합니다. 그후 CodeDeploy는 이전 버전의 애플리케이션을 실행하는 기존 인스턴스 집합에서 최신 버전을 실행하는 새 인스턴스 집합으로 로드 밸런서 트래픽을 다시 라우팅합니다. 트래픽이 새 인스턴스로 다시 라우팅된 후에는 기존 인스턴스를 종료할 수 있습니다.
      • SSM parameter store :
        • AWS Systems Manager Parameter Store는 AWS Systems Manager의 기능 중 하나로, 구성 데이터와 비밀 문자열을 안전하게 저장하고 액세스할 수 있는 서비스입니다. Parameter Store를 사용하여 애플리케이션에서 필요한 구성 정보를 중앙에서 관리할 수 있습니다.
          Parameter Store는 키-값 쌍으로 데이터를 저장하며, 다양한 유형의 데이터를 지원합니다. 주요 기능은 다음과 같습니다:
          1. 구성 데이터 저장: 애플리케이션의 구성 정보, 환경 변수, 설정 값 등을 저장할 수 있습니다. 예를 들어, 데이터베이스 연결 문자열, API 토큰, URL 등을 저장할 수 있습니다.
          1. 암호화 및 보안: Parameter Store는 저장된 값에 대해 암호화를 제공하며, AWS Key Management Service (KMS)를 사용하여 관리됩니다. 이를 통해 애플리케이션에서 중요한 비밀 문자열을 안전하게 저장할 수 있습니다.
          1. 계층적 구성: Parameter Store는 계층적인 네임스페이스 구조를 지원하여 구성 데이터를 조직화할 수 있습니다. 계층적인 키 구조를 사용하여 값을 그룹화하고 쉽게 관리할 수 있습니다.
          1. 액세스 관리: IAM (Identity and Access Management) 정책을 사용하여 Parameter Store의 액세스를 관리할 수 있습니다. 이를 통해 애플리케이션, EC2 인스턴스, Lambda 함수 등의 엔티티에 대한 액세스 권한을 세밀하게 제어할 수 있습니다.
      Share article
      RSSPowered by inblog