실습예제

문학적인유사성·2022년 2월 8일
0

AWS

목록 보기
9/63
post-thumbnail

AWS Lambda로 Thumbnail image자동 생성하기

s3 -> 람다 -> resized s3
아마존 실습

import boto3
import os
import sys
import uuid
from urllib.parse import unquote_plus
from PIL import Image
import PIL.Image

s3_client = boto3.client('s3')

def resize_image(image_path, resized_path):
  with Image.open(image_path) as image:
      image.thumbnail(tuple(x / 2 for x in image.size))
      image.save(resized_path)

def lambda_handler(event, context):
  for record in event['Records']:
      bucket = record['s3']['bucket']['name']
      key = unquote_plus(record['s3']['object']['key'])
      tmpkey = key.replace('/', '')
      download_path = '/tmp/{}{}'.format(uuid.uuid4(), tmpkey)
      upload_path = '/tmp/resized-{}'.format(tmpkey)
      s3_client.download_file(bucket, key, download_path)
      resize_image(download_path, upload_path)
      s3_client.upload_file(upload_path, '{}-resized'.format(bucket), key)
            

docker 설치

제어판 > 프로그램 설치 및 제거 > Window 기능 켜기/끄기 클릭 > Hyper-V 체크 확인 후 리부팅

도커설치 요류 해결 링크 ㅠㅠ

출처: https://goddaehee.tistory.com/251 [갓대희의 작은공간]

//컨테이너 실행하기 
docker run --name lambda-img -it lambci/lambda:build-python3.8 bash

//컨테이너에 설치
mkdir -p opt/python
pip install pillow -t opt/python
pip install boto3 -t opt/python
cd opt
ls
exit

//컨테이너에서 호스트로 복사 
docker container cp lambda-img:/var/task/opt/python c:/dockerfiledown

압축해서 layer 생성, 추가
런타임 버전이 맞아야 나오더라..(당연한걸지도;; )
테스트하려고 넣은 테스트값

{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "aws:s3",
      "awsRegion": "us-west-2",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "AIDAJDPLRKLG7UEXAMPLE"
      },
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "responseElements": {
        "x-amz-request-id": "C3D13FE58DE4C810",
        "x-amz-id-2": "FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "testConfigRule",
        "bucket": {
          "name": "serverlessku-bucket(내버킷이름)",
          "ownerIdentity": {
            "principalId": "A3NL1KOZZKExample"
          },
          "arn": "arn:aws:s3:::serverlessku-bucket(버킷이름내꺼)"
        },
        "object": {
          "key": "상어.jpg(바꿀사진이름)",
          "size": 1024,
          "eTag": "d41d8cd98f00b204e9800998ecf8427e",
          "versionId": "096fKKXTRTtl3on89fVO.nfljtsv6qko"
        }
      }
    }
  ]
}

잘되는 것을 확인!
docker 설치도 처음해보고 되게 재미있는 시간이였다.
docker에 대해서 조금더 공부가 필요한 것같다.

AWS Lambda와 Amazon SES로 이메일 발송하기

AWS CloudFront와 Lamda@Edge

CDN특징 : 캐시 처리, 해당 사용자가 접근한 기록이 있으면 해당 노드에서 바로 처리해서 보여줌.
GSLB(Global Server Load Balancing) : DNS서비스의 발전된 형태, DNS는 서버의 상태를 알 수 없어 응답에 실패할 상황이 실패할 상황이 생길 수 있음. GSLB는 등록된 호스트에 주기적으로 Health Check. 실패한 경우 DNS응답에서 실패한 호스트를 제거하여 서버의 가용성 높일수있음. CDN은 1개의 서버에 여러 노드가 연결되어있음.

403나올때 버킷권한 퍼블릭으로 바꾸기, 정책 추가

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::cloudfront-lambda-edge-test-kyoin/*"
        }
    ]
}

s3내부 파일도 권한을 퍼블릭으로 설정해주어야한다! <- 이거 안되서 오래 헤맸음

s3권한 get넣어주기
OAI권한 넣어주기 후 배포
배포후에도 일정 시간이 걸린다!!! 기다려!!!

람다엣지신뢰관계추가방법
https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-permissions.html

람다엣지 배포후 postman 확인! 예아 너무 잘되서 해쁴

AWS CodeStar로 빠르게 웹 서비스 만들기

AWS CodeCommit를 사용하여 소스를 관리하고 AWS CodeBuil를 사용하여 코드를 빌드하고 테스트함
배포는 AWS CloudFormation을 사용, 모니터링은 Amazon CloudWatch 사용

끝!

실습을 하면서 막상 쉬운데 어떤 곳에서 막히는게 너무 힘들었다. 나중에 보면 내가 한 실수때문에 다른게 안되는 거였음. 역시 눈으로만 보는게 아니라 직접해봐야 하는 것 같다.
첫 람다를 이용해서 이것저것해볼수있어서 좋았고, 파이썬을 옛날에 공부를 해두길잘했다는 생각이 든다.
뭐든지 해놓으면 언젠가 돌아오나보다. 싸피에서 백엔드 공부한 것도 어떻게 보면 공부가 되는중이라서 너무 즐겁다. 쉬운 것이지만 조금씩 발전해 나가고 있는거 아닐까 싶기도하다.

profile
Are you nervous? Don't be

0개의 댓글