간만에 글을 쓰는데, 최근에 굉장히 바빴다... 원래 같으면 이것저것 글을 남겨두는데... 흠. 뭐 어쩔 수 없지.
일단 좀 더 개발 환경에 가까운 s3를 먼저 복습해보도록 하자. 이미 개발 자체는 끝났으니까 리뷰하면서 하면 될 듯.
이 다음은 대망의 three.js를 다룰 건데, 아직도 viewport sync가 제대로 되지 않아서 그것만 고치면 어떻게든 될 것 같긴하다.
이걸 개발하면서 느낀 제일 중요한 점은 "최신 라이브러리도 찍먹 하자" 이다. 알고보니 aws sdk의 버전에 따라서 꽤나 이용방법이 다르다.
npm에서 aws-sdk라는 이름의 패키지를 깔아서 이용하고 있다면 v2, @aws-sdk/???? 와 같이 구체적인 패키지를 따로 깔아서 이용하고 있다면 v3 이상을 이용하고 있다는 뜻이다. v2는 이번 년도 이후로 지원은 중지한다는 듯 싶고 지금도 long-maintainence 기간이라는 것 같다. 나는 v2를 이용하려고 했다가 괜히 삽질만 하고 제대로 결과가 나오지 않았기 때문에 v3를 이용하는 방법을 여기에 적어두려 한다.
우선 s3 및 계정 설정을 먼저한다.
1. s3 버킷을 생성한다. 이는 특별할 것이 없이 기본 설정으로 하면 된다.
BUCKET_NAME, 원한다면 AWS_REGION(리전 코드, 서울은 ap-northeast-2) 얻기
2. iam 에서 policy를 만든다. create policy를 클릭.
2-1. policy 생성 -> 서비스에서 sts 선택 -> 쓰기 탭의 assumeRole 체크 -> 리소스의 모두 체크
3. iam 에서 master user를 만든다. assumeStsPolicy를 직접 정책 연결을 선택해서 넣는다.
3-1. 해당 유저에 accesskey를 만들고 accesskey 및 secret key 복사
ACCESS_KEY, ACCESS_SECRET_KEY, AWS_MASTER_ARN 얻기
4. role을 만든다. s3 full access 가능.
AWSARN 얻기
5. role의 trust 탭에서
{
"Effect": "Allow",
"Principal": {
"AWS": "[AWS_MASTER_ARN]"
},
"Action": "sts:AssumeRole"
}
를 넣어준다. 하면 기본적인 access는 가능해진다.
이젠 node 프로젝트에서 설정을 해주자.
0. npm i 를 이용해서 다음 패키지를 설치한다.
npm i @aws-sdk/client-s3 @aws-sdk/credential-providers @aws-sdk/s3-request-presigner
1. next.config.js 에 해당 origin 추가
images: {
remotePatterns: [
{
protocol: "https",
hostname: "[만들어진 s3 bucket 이름].s3.ap-northeast-2.amazonaws.com",
port: "",
pathname: "**"
}
]
}
2. 한 다음 아래와 같이 s3 client를 생성
import { GetObjectCommand, ListBucketsCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { fromTemporaryCredentials } from '@aws-sdk/credential-providers';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
...dotenv 등이용해서 아래의 키를 받아온다.
const s3 = new S3Client({
region: AWSREG,
credentials: fromTemporaryCredentials({
masterCredentials: {
accessKeyId: AWSMASTERID!,
secretAccessKey: AWSMASTERSECKEY!,
},
// Required. Options passed to STS AssumeRole operation.
params: {
// Required. ARN of role to assume.
RoleArn: AWSARN!,
RoleSessionName: `aws-sdk-js-${new Date().getTime().toString()}`,
DurationSeconds: 3600,
// ... For more options see https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html
},
// Optional. Custom STS client configurations overriding the default ones.
clientConfig: { region: AWSREG }
}),
})
3. 끝! 이제 공식문서 v3를 보면서 받아올거 받아오면 된다. 와!...
사실 @aws-sdk/???? 어캐 이용함? 뭐 이런식으로 google에 치면 앵간한건 나오는 편인듯 하다.
'일지 > 헬키' 카테고리의 다른 글
[사고쳤다 / Mongodb Atlas] 헬키 개발일지 12. aggregate + $out의 위험성과 백업의 중요성 (feat. 200번째 글) (8) | 2024.09.02 |
---|---|
[RN 죽어] 헬키 개발일지 10. PWA 찍먹 (0) | 2024.07.24 |
헬키 개발일지 9. 개발의 슬럼프 (1) | 2024.07.18 |
헬키 개발일지 8. 2024 06 29 React의 복잡한 hooking (0) | 2024.06.30 |
헬키 개발일지 7. 2024 06 26 React Native + Expo 앱 배포 방법 정리 (0) | 2024.06.27 |