레이블이 s3인 게시물을 표시합니다. 모든 게시물 표시
레이블이 s3인 게시물을 표시합니다. 모든 게시물 표시

boto3 s3 업로드 후 파일 안보이는 문제

# python boto3 라이브러리를 이용해 s3 파일 업로드를 했는데
# 디렉토리는 생성됐지만 s3 파일이 존재하지 않는다.
# 확인해 보니 / 로 시작하는 path(key) 때문이었다.

...  생략 ...

path = f"/test/{filename}"
# / 로 시작하면 업로드 후 파일이 없는것으로 표시된다.
path = path.lstrip("/")

# upload to s3
client.upload_file(
    Filename=filename,
    Bucket=AWS_BUCKET,
    Key=path,
    Callback=lambda bytes_transferred: pbar.update(bytes_transferred),
)

# 테스트 코드 

minio client command

# minio client(https://github.com/minio/mc)는 aws s3 종류의
# object storage 에 cat,ls,cp,rm 등의 파일 관련 명령을 실행할 수 있고
# go 로 만들어져 관련 go 애플리케이션 개발에도 사용할 수 있다.

# 설치
# 참고로 midnight commander https://github.com/MidnightCommander/mc 가 있다면 이름이 같아서, brew 설치시 /usr/local/bin/mc 가 충돌난다. 
# brew unlink midnight-command 로 링크를 해제해야 한다
# 그리고 midnight commander 는 다음과 같이 alias 로 사용하자.
# alias m-c='/usr/local/Cellar/midnight-commander/4.8.28/bin/mc'
brew install minio/stable/mc

# ysoftmanS3, ysoftmanGCS 이름으로 credential 설정
# 설정은 ~/.mc/config.json 에 저장된다.
# --api S3v2 또는 S3V4(기본) 를 선택할 수 있다.
mc alias set ysoftmanS3 https://s3.amazonaws.com {accesskey} {secretkey}
mc alias set ysoftmanGCS https://storage.googleapis.com {accesskey} {secretkey}

# alias 확인
mc alias ls

# 자동완성 기능이 현재 쉘 설정(.bashrc, .zshrc)에 추가된다.
# 쉘 재시작 후 mc <tab> 으로 사용
mc --autocompletion

# a 버킷(디렉토리) 생성
mc mb ysoftmanS3/a

# a 버킷(디렉토리) 삭제
mc rb ysoftmanS3/a

# ./test.txt -> ysoftmanS3/a/test.txt 로 복사
mc cp ./test.txt ysoftmanS3/a

# ysoftmanS3 의 a 디렉토리 내용
mc ls ysoftmanS3/a

# ysoftmanS3 의 a 디렉토리 크기
mc du ysoftmanS3/a

# 상태 확인
mc stat ysoftmanS3/a/test.txt

# 파일 내용 확인
mc cat ysoftmanS3/a/test.txt

# 파일 삭제
mc rm ysoftmanS3/a/test.txt

aws cli command

# AWS CLI 설치
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-mac.html
# mac
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

# linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

# AWS > IAM > 사용자 > 보안자격증명 > 액세스 키 만들기
# 액세스 키ID: xxxxx
# 비밀 액세스 키ID: xxxxx (액세스 키는 만들기 팝업에서만 보이기 때문에 이때 적어둬야함, 이때 못 보면 새로 만들어야함)
# AWS CLI 명령
# aws 접속 설정
aws configure
AWS Access Key ID [None]: xxxxx
AWS Secret Access Key [None]: xxxxx
Default region name [None]: ap-northeast-2
Default output format [None]: json

# aws 접속 설정 수정
vi ~/.aws/credentials
vi ~/.aws/config

# eks 연결 설정
aws eks update-kubeconfig --region ap-northeast-2 --name ysoftman-dev

# ecr 클라언트 인증
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin xxxxx.dkr.ecr.ap-northeast-2.amazonaws.com

# elb(classic) 리스트 파악
aws elb describe-load-balancers

# elb tag key 중 "ysoftman" 가 포함된 설정 보기
aws elb describe-load-balancers | rg -i loadbalancername | awk '{print $2}' | sed -e "s/\"//g" -e "s/,//g" | xargs aws elb describe-tags --load-balancer-names | jq '.TagDescriptions[] | select (.Tags[].Key | contains("ysoftman"))'

# elbv2(nlb, alb) 리스트 파악
aws elbv2 describe-load-balancers

# elbv2 LoadBalancerName 중 "ysoftman" 가 포함된 설정 보기 (arn 기준으로 찾는다.)
aws elbv2 describe-load-balancers | rg -i arn | awk '{print $2}' | sed -e "s/\"//g" -e "s/,//g" | xargs aws elbv2 describe-load-balancers --load-balancer-arns | jq '.LoadBalancers[] | select (.LoadBalancerName | contains("ysoftman"))'

# ec2 network acls 설정 보기
aws ec2 describe-network-acls


#####

# AWS > IAM > 사용자 > 권한 > 기존 정책 직접 연결 > AmazonS3FullAccess 선택 후 다음(권한추가)

# AWS > S3 > 버킷(bill-xxxxx) 생성 또는 
aws s3 mb s3://bill-xxxx

# s3 버킷 리스트(접속 확인)
aws s3 ls | grep bill-xxxxx

# billtest.txt 업로드
aws s3 cp billtest.txt s3://bill-xxxxx

# abc 디렉토리 업로드
aws s3 cp ./abc s3://bill-xxxxx/abc --recursive
# 또는 
aws s3 sync ./abc s3://bill-xxxxx/abc

# abc 디렉토리 삭제
aws s3 rm s3://bill-xxxxx/abc --recursive