티스토리 뷰
안녕하세요. Developing on AWS 실습 내용을 진행하며 aws 내 cli, sdk, api 사용 관련 주요 내용을 정리한 글입니다.
개발 환경 구성
# IDE 설치 확인
$ python --version# AWS CLI 설치 확인
$ aws --version$ aws configure
$ aws sts get-caller-identity# IAM 권한 확인
$ aws s3 ls$ bucketToDelete=$(aws s3api list-buckets --output text --query 'Buckets[?contains(Name, `deletemebucket`) == `true`] | [0].Name')# s3 삭제 시도
$ aws s3 remove-bucket s3://$bucketToDelete# 예상 출력******************************
**** This is OUTPUT ONLY. ****
******************************remove_bucket failed: s3://6nzxc1sjkmar-lab1deletemebucket-t63kd50lk000 An error occurred (AccessDenied) when calling the DeleteBucket operation: Access Denied# --debug 옵션 사용$ aws s3 rb s3://$bucketToDelete --debug# 디버그를 통해 인스턴스 메타데이터 검색하여 인증 프로세스 시작
# v4 auth를 사용하여 서명 확인 후 Amazon s3 요청 준비하고 응답헤더, 응답 본문을 생성하고 버킷 목록을 반환
# Amazon s3 엔드포인트에 연결. 403오류 Access Denied 발생$******************************
**** This is OUTPUT ONLY. ****
******************************2022-03-24 19:19:39,894 - MainThread - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): 6nzxc1sjkmar-lab1deletemebucket-t63kd50lk000.s3.ap-northeast-1.amazonaws.com:443
2022-03-24 19:19:39,981 - MainThread - urllib3.connectionpool - DEBUG - https://6nzxc1sjkmar-lab1deletemebucket-t63kd50lk000.s3.ap-northeast-1.amazonaws.com:443 "DELETE / HTTP/1.1" 403 None
2022-03-24 19:19:39,982 - MainThread - botocore.parsers - DEBUG - Response headers: {'x-amz-request-id': '7XBWQ3W8JM3KRY1W', 'x-amz-id-2': 'HcRkKJkSag//iCDC+ap7N/FaWWYNPhAsOdTE24I6pFYPdn+sZ7qtv1mzy4ZcKID++GCjomil6ks=', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked', 'Date': 'Thu, 24 Mar 2022 19:19:39 GMT', 'Server': 'AmazonS3'}
2022-03-24 19:19:39,982 - MainThread - botocore.parsers - DEBUG - Response body:
b'<?xml version="1.0" encoding="UTF-8"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>7XBWQ3W8JM3KRY1W</RequestId><HostId>HcRkKJkSag//iCDC+ap7N/FaWWYNPhAsOdTE24I6pFYPdn+sZ7qtv1mzy4ZcKID++GCjomil6ks=</HostId></Error>'remove_bucket failed: s3://6nzxc1sjkmar-lab1deletemebucket-t63kd50lk000 An error occurred (AccessDenied) when calling the DeleteBucket operation: Access Denied# notes-application-role에 s3:DeleteBucket IAM 권한이 위임되지 않아 실패# 고객 관리형 IAM 정책 검토
$ policyArn=$(aws iam list-policies --output text --query 'Policies[?PolicyName == `S3-Delete-Bucket-Policy`].Arn')$ aws iam get-policy-version --policy-arn $policyArn --version-id v1******************************
**** This is OUTPUT ONLY. ****
******************************PolicyVersion:
CreateDate: '2022-03-24T17:58:58+00:00'
Document:
Statement:
- Action:
- s3:DeleteBucket
Effect: Allow
Resource: arn:aws:s3:::6nzxc1sjkmar-lab1deletemebucket-t63kd50lk000
Version: '2012-10-17'
IsDefaultVersion: true
VersionId: v1# IAM 정책을 NOTES-APPLICATION-ROLE에 연결
$ aws iam attach-role-policy --policy-arn $policyArn --role-name notes-application-role# 역할에 연결된 정책 검토
$ aws iam list-attached-role-policies --role-name notes-application-role******************************
**** This is OUTPUT ONLY. ****
******************************AttachedPolicies:
- PolicyArn: arn:aws:iam::710606863198:policy/S3-Delete-Bucket-Policy
PolicyName: S3-Delete-Bucket-Policy
- PolicyArn: arn:aws:iam::aws:policy/ReadOnlyAccess
PolicyName: ReadOnlyAccess
- PolicyArn: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
PolicyName: AmazonSSMManagedInstanceCore# 버킷 삭제 명령을 실행하여 버킷 삭제 확인
$ aws s3 rb s3://$bucketToDelete******************************
**** This is OUTPUT ONLY. ****
******************************remove_bucket: 6nzxc1sjkmar-lab1deletemebucket-t63kd50lk000$ aws s3 ls******************************
**** This is OUTPUT ONLY. ****
******************************2022-03-24 17:58:34 6nzxc1sjkmarkw5g4ugi-lab1bucket-1g9fvp2ico63h
Amazon S3
ETag 헤더 : 멀티 파트 업로드 시 중요!!!
- 헤더에 지정된 메타데이터를 검토해야하는 경우가 있습니다. 예를들어 파일 및 객체 비교를 위해 응답의 ETag 헤더를 사용할 수 있습니다. 객체는 S3 버킷에 업로드되면 ETag를 받습니다. 이 ETag는 MD5 알고리즘을 사용하여 계산된 체크섬입니다. 업로드가 멀티파트인 경우 ETag에는 정보의 일부가 포함됩니다.
s3 python API
head_bucket(**kwargs)
멀티파트 업로드
미리 서명된 URL 생성
** pre-signed url 생성
$ aws s3 presign s3://us-stocks/contacts.json --expires-in 60** presigned-py
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': 'us-stocks', 'Key': 'contacts.json'},
ExpiresIn=60)
print(url)
Python 페이징
import boto3
from botocore.exceptions import ClientError
def paginate_through_all_objects_s3_bucket(bucket_name, max_items=None:int,page_size=None:int, starting_token=None:string):
session = boto3.session.Session()
s3_client = session.client('s3')
try:
paginator = s3_client.get_paginator('list_objects')
response = paginator.paginate(Bucket=bucket_name, PaginationConfig={
'MaxItems':max_items,
'PageSize':page_size,
'StartingToken':starting_token}
)
return response
except ClientError as e:
raise Exception("boto3 client error in paginate_through_all_objects_s3_bucket: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in paginate_through_all_objects_s3_bucket: " + e.__str__())
#1st Run
a = paginate_through_all_objects_s3_bucket('s3-test-bucket',2,5)
print(*a)
#2nd Run
for items in a:
next_token = items['Contents'][max_items-1]['Key']
b = paginate_through_all_objects_s3_bucket('s3-test-bucket',2,5,next_token)
print(*b)
s3 배치 작업
정적 웹사이트 호스팅
CORS : 한 도메인에서 로드되어 다른 도메인에 있는 리소스와 상호작용하는 클라이언트 웹 애플리케이션에 대한 방법 정의
CORS 설정
https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html
Amazon DynamoDB
- DynamoDB 테이블 생성
- 테이블에 데이터 로드
- 파티션 키 및 프로젝션을 사용하여 데이터 쿼리
- Paginator를 사용하여 테이블 스캔
- 테이블 항목 업데이트
- DynamoDB용 PartiQL사용
AWS Lambda
Amazon API Gateway
- 스토리지, DB, 벡엔드가 설정된 후 AWS Lambda 함수에 엑세스할 수 있는 방법이 필요합니다.
- API gateway 리소스를 생성한 후, lambda 함수에서 반환된 응답을 변환합니다. CORS헤더를 구성합니다.
- REST API 및 리소스 생성
- GET 메서드 구성 및 응답 변환을 위한 매핑 템플릿 추가
- POST 메서드 구성 및 요청 검증 모델 추가
- CORS 구성으로 API 배포
App Mordenization
AWS X-Ray
blog migration project
written in 2022.10.12
https://medium.com/techblog-hayleyshim/aws-devloping-on-aws-394239df3da0
'IT > Infra&Cloud' 카테고리의 다른 글
[csp]Hierarchy Architecure & API/API Gateway (0) | 2023.10.29 |
---|---|
[gcp] GKE Implementation & CLI Configuration (0) | 2023.10.29 |
[aws] EKS Hands On — EKS Anywhere (0) | 2023.10.29 |
[aws] EKS Hands On — Blueprints (0) | 2023.10.29 |
[aws] EKS Hands On — Security (0) | 2023.10.29 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- cni
- handson
- k8s
- EKS
- security
- SDWAN
- GKE
- NW
- VPN
- S3
- terraform
- PYTHON
- IaC
- 혼공챌린지
- GCP
- 혼공단
- cloud
- operator
- 국제 개발 협력
- 도서
- NFT
- 파이썬
- AWS
- controltower
- 혼공파
- k8s calico
- OS
- k8s cni
- gcp serverless
- AI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함