[AWS] SAM S3 presigned url - 1

옥영빈·2022년 12월 16일
0

문제점

기존 nodejs로 server를 만들어 임의의 페이지 생성 후 거기에 할당 된 url값을 s3에 올리는 형식으로 구성

하지만

서버가 없는 형식으로 바뀌고 난 후 url값을 생성하고 받아 올 수 있는 방법이 사라져서 serverless로 방식을 변경해야 함

AWS SAM 진행하기

참고
https://github.com/aws-samples/amazon-s3-presigned-urls-aws-sam

기본 조건

  1. AWS CLI 설치
  2. AWS SAM CLI 설치 - 최소 버전 0.48
  3. Nodejs 12.x 설치

위 의 3가지 조건인데
나의 경우 NVM으로 Nodejs 버전을 관리 중
실제로 해본 결과 Nodejs는 16.x 버전으로도 가능 했다

그리고
기존의 AWS의 기존 IAM사용자를 사용해도 되지만

Error: Failed to create managed resources: An error occurred (SignatureDoesNotMatch) when calling the CreateChangeSet operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

어떤 이유에서인지 위의 에러 사항이 나오며 계속 진행이 안되었다. 그래서 새로운 AWS IAM사용자를 생성해서 진행했다.

제대로 찾아본 결과

방법은 IAM 사용자를 다시 만드는것 뿐이라고 한번 더 확인 했다...

이런 현상의 원인

AWS IAM Credential의 Secret Access Key의 / 또는 % 기호가 포함되어있을 때 발생한다고 합니다.

근데 다시 보면 / 또는 % 가 없는데...?

/ 또는 % 문자를 escape 문자로 처리해서 Access Key가 변형 되는 것이 원인이라고 합니다. -> 추측

이 문제로 몇 시간 동안 ...

참고
https://lynlab.co.kr/blog/52

// git clone으로 패키지 받아오기
// 터미널 창에서
git clone https://github.com/aws-samples/amazon-s3-presigned-urls-aws-sam.git

// 해당 폴더로 이동
cd amazon-s3-presigned-urls-aws-sam.git

// sam 배포 명령어
sam deploy --guided

위의 명령어 실행 시
아래의 설정들이 차례로 뜬다

  • Stack Name [~~]: "스택이름으로 지정 할 이름 넣기"
  • AWS Region [~~]: "한국의 경우 ap-northeast-2"
  • #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
    Confirm changes before deploy [Y/n]: y
  • #Preserves the state of previously provisioned resources when an operation fails
    Disable rollback [y/N]:n
  • UploadRequestFunction may not have authorization defined, Is this okay? [y/N]: y
  • Save arguments to configuration file [Y/n]: y
  • SAM configuration file [samconfig.toml]: [enter] 누르면 samconfig.toml 이름으로 파일 생성
  • SAM configuration environment [default]: [enter] 누르면 기본 값으로 환경설정

이런 식으로 결과 화면이 떠야한다.

  • Deploy this changeset? [y/N]:y

마지막으로 위의 단계까지 넘어가면
aws CloudFormation에서 생성된 스택을 확인 가능 하며
상태가 저렇게 되어 있지 않을 경우 직접 삭제 후 다시

sam dploy --guided

를 실행 해야 한다.

순차적으로 진행이 되었다면 S3에서 버킷이 2개가 생성 되어 있는 것을 알 수 있다.

aws-sam-cli-managed-default-samclisourcebucket-~~~ 으로된 버킷과
[StackName]으로 이름이 시작하는 버킷이 생성이 되었다면 준비는 완료!

  • aws-sam-cli-managed-default-samclisourcebucket-~~ : 템플릿을 저장하는 s3 버킷
  • [StackName]으로 이름이 시작하는 버킷 : Front에서 올린 파일을 저장하는 버킷

코드 수정은 다음 글에서 -------->

profile
webGL개발 초보

0개의 댓글