AWS 64

[boto3] S3 특정 prefix 아래 모든 객체 가져오기

개요 Python에서 boto3을 이용해 S3 버킷에 저장된 객체 목록을 가져올 때는 list_object, list_object_v2 함수를 사용한다. 이 두 함수는 최대 1000개의 객체를 반환한다. 따라서 1000개 이상의 객체가 저장된 prefix에 대해 list_object를 요청해도 모든 객체를 반환받지 못한다. AWS에서 제공하는 Paginator를 사용해 문제를 해결해 보자. Paginator 사용 AWS operation 중 전체 결과 집합을 얻기 위해 후속 요청이 필요한 경우, 이전 요청이 중단된 곳에서 작업을 지속하기 위해 후속 요청을 보내는 프로세스를 pagination이라고 한다. Paginator는 API 작업의 전체 결과 집합에 대해 반복하는 프로세스에 대한 추상화 역할을 한다..

AWS 2023.05.23

[AWS] MFA 활성화 사용자로 aws cli 사용

개요 평소 AWS를 사용할 때 MFA 활성화된 계정은 콘솔에서만 사용하고, 서버나 EC2에서 AWS CLI를 사용할 때는 별도의 액세스 키나 IAM Role에 권한을 부여받아 사용해왔다. 다만 테스트 시 MFA 활성화 사용자로 AWS CLI를 사용하는 방법을 알게 되어 직접 적용해보았다. 사용자 생성 1. 사용자 생성 생성한 사용자에게는 간단히 권한을 확인하기 좋은 AmazonS3FullAccess나 AmazonEC2FullAccess 권한을 부여한다. AWS CLI를 사용할 것이기 때문에 액세스 키도 생성한다. 2. 권한 확인 생성한 사용자가 S3 서비스를 이용할 수 있는지 CLI로 확인해본다. aws configure --profile mfa aws s3 ls --profile mfa MFA 인증 요..

AWS 2023.03.16

[AWS] EFS 개념 및 생성/마운트

Amazon Elastic File System AWS에서 제공하는 서버리스 파일 시스템이다. EC2 하나에만 마운트 할 수 있는 EBS와 달리, NFS(Network File System)을 지원하여 여러 서버에서 동시에 접근하여 사용할 수 있다. AWS가 제공하는 NAS라고 생각할 수 있다. 또한 파일 시스템에 저장된 파일의 용량에 따라 자동으로 확장되며, 처리량과 IOPS 또한 자동으로 조절된다. 다만 사용한 용량만큼의 비용이 발생하므로 주의해야 한다. 이 글에서는 EFS를 생성하고 EC2에 마운트해보려고 한다. EFS 생성 1. AWS Console EFS 서비스 이동 파일 시스템 생성 버튼을 클릭한다. 2. 파일 시스템 생성 > 사용자 지정 클릭 서비스 권장 설정으로 EFS를 간단히 생성할 수도..

AWS 2023.03.15

[AWS] S3 Select VS Athena

개요 S3 Select과 AWS Athena는 S3 버킷에 저장된 데이터를 DB를 사용하는 것처럼 SQL을 사용하여 조회할 수 있게 해 준다. 비슷한 기능을 제공하는데 두 서비스의 차이는 어떻게 될까? 간단히 정리해 둔다. S3 Select 참고 : 2022.11.07 - [AWS] S3 Select - 객체 내 데이터 쿼리 간단한 SQL을 사용해 전체 객체를 검색하는 대신 S3 객체 콘텐츠의 하위 집합을 검색하는 S3 기능이다. CSV, JSON, Apache Parquet 형식이어야 하며, GZIP, BZIP2 방식으로 압축된 데이터 대해서도 사용할 수 있다. 서버리스 기능이므로 기능을 사용하기 위해 관리해야 하는 인프라가 없다. 다만 SELECT 문만 지원하며 FROM, WHERE, LIMITS 절..

AWS 2023.03.13

[AWS] Athena 개념 및 사용법

AWS Athena 표준 SQL을 사용해 AWS S3에 저장된 데이터를 분석할 수 있는 대화형 쿼리 서비스 S3에 저장된 데이터를 지정하고 표준 SQL을 사용하면 임시 쿼리를 실행하여 결과를 얻을 수 있다. 즉, S3에 저장된 데이터를 DB에 저장된 데이터처럼 다룰 수 있다. 주로 로그와 같은 대규모 데이터를 로드하고 압축을 푸는데 필요한 시간과 비용을 줄이기 위해 사용한다. 특징 Serverless 서비스를 이용하기 위해 관리할 인프라가 없다. 또한 AWS 콘솔을 통해 사용할 수 있다. 비용 실행한 쿼리에 대한 비용을 지불한다. 조금 더 정확하게는 실행한 쿼리가 스캔한 데이터의 용량만큼 비용이 청구되는데 1TB 당 5달러 정도이다. 따라서 데이터 압축이나 파티셔닝을 이용해 스캔하는 양을 줄이면 보다 효..

AWS 2023.03.11

[AWS] ec2metadata - EC2 인스턴스 메타데이터 확인

EC2 인스턴스 메타데이터(IMDS) intance_id, instance_type, ami-id 등과 같이 실행 중인 인스턴스를 구성하거나 관리하는 데 사용하는 인스턴스 관련 데이터 EC2 생성 시 메타데이터의 엑세스 여부와 버전 등을 선택할 수 있다. 인스턴스 메타데이터를 사용해 인스턴스를 시작할 때 지정한 사용자 데이터(실행 스크립트)에도 접근이 가능하다. 다만 인증 또는 암호화 등의 방법으로 보호되지 않으며 인스턴스에 접근할 수 있는 모든 사용자는 제한 없이 접근할 수 있다. ec2metadata ec2metadata를 검색할 수 있는 명령어로, EC2에는 기본적으로 포함되어 있는 것 같다. 만약 명령어가 설치되어 있지 않다면, 아래의 명령어를 이용해 설치할 수 있다. apt install clo..

AWS 2023.02.14

[AWS] 자격 증명 기반 정책 / 리소스 기반 정책

정책 자격 증명 또는 리소스에 연결될 때 해당 권한을 정의하는 AWS 객체 리소스에 대한 액세스를 제한하는 권한 정책을 생성할 때 자격 증명 기반 정책(Identity-based policies) 또는 리소스 기반 정책(Resource-based policies)을 선택할 수 있다. 정책은 아래와 같이 분류할 수 있다. 자격 증명 기반 정책 (Identity-based policies) AWS 관리형 정책 고객 관리형 정책 인라인 정책 리소스 기반 정책 (Resource-based policies) 자격 증명 기반 정책 IAM 사용자, 그룹, 역할에 연결되어, 자격 증명이 수행할 수 있는 작업을 지정할 수 있다. AWS 관리형 정책 AWS에서 기본적으로 생성하고 관리한다. *FullAccess, *Pow..

AWS 2023.01.23

[boto3] S3 Select - OverMaxRecordSize 에러 대안

개요 아래와 같이 S3 Select 기능을 이용해 S3 버킷에 저장된 GZIP으로 압축된 JSON 데이터의 내용을 읽어 들이려고 한다. import boto3 client = boto3.client('s3') response = client.select_object_content( Bucket=bucket, Key=obj_key, Expression='SQL', ExpressionType='SQL', InputSerialization={ 'CompressionType': 'GZIP', 'JSON': { 'Type': 'LINES' } }, OutputSerialization={ 'CSV': {}, }, ) for event in response.get('Payload'): if 'Records' in e..

Python 2023.01.21

[AWS] EKS 접근 설정

개요 이미 생성되어 있는 EKS에 접속할 수 있도록 설정해보려고 한다. EKS에 접근하기 위해서는 다음과 같은 사항이 필요하다. aws cli : eks는 버전 2에서만 지원한다. EKS 클러스터 접근 권한이 부여된 IAM 사용자 또는 역할 kubectl 방법은 다음과 같다. 권한 설정 및 확인 aws profile을 등록하고, 접근할 EKS 클러스터의 정보를 조회할 수 있는지 확인한다. # profile 등록 aws configure # 클러스터 목록 확인 aws eks list-clusters \ --profile --region ap-northeast-2 # 클러스터 정보 확인 aws eks describe-cluster \ --name \ --profile --region ap-northeast-..

AWS 2023.01.09

[boto3] S3 내 지정한 경로 내의 하위 경로 조회

개요 aws cli로 s3 ls를 했을 때, 지정한 prefix에 존재하는 subprefix 정보를 boto3을 통해 얻고 싶다. 방법을 정리한다. client.list_objects_v2 버킷에 존재하는 객체의 일부 또는 전체(최대 1000개)를 반환한다. 조회할 버킷의 이름(Bucket), 조회할 prefix를 지정해야 한다. response = client.list_objects( Bucket='string', Delimiter='string', EncodingType='url', Marker='string', MaxKeys=123, Prefix='string', RequestPayer='requester', ExpectedBucketOwner='string' ) response 예시 { 'IsTr..

Python 2022.12.26
1 2 3 4 5 6 7