스테이지 간 리소스 공유
앱 내에서 스테이지 간 리소스를 공유합니다.
스테이지 간 공유
여러분은 앱의 모든 리소스를 sst.config.ts 파일에 정의합니다. 이 리소스들은 배포하는 각 스테이지마다 생성됩니다.
하지만 모든 스테이지에서 특정 리소스를 다시 생성하지 않으려는 경우가 있을 수 있습니다.
공유하는 이유
일반적으로 다음과 같은 경우에 리소스를 공유하고 싶을 수 있습니다:
- Postgres 클러스터처럼 비용이 많이 들고 실제 사용량에 따른 요금제가 아닌 리소스
- 또는 새로운 단계에서 재사용해야 하는 데이터를 포함하는 경우. 예를 들어 PR 단계는 스테이징 데이터에 대한 테스트만 수행하면 되므로 일부 리소스를 다시 생성할 필요가 없을 수 있습니다.
더 많은 리소스를 단계 간에 공유하고 싶을 수 있지만, 위의 경우에만 공유를 권장합니다.
공유 방법
이를 돕기 위해 일부 SST 컴포넌트는 static get 메서드를 제공합니다. 이러한 컴포넌트는 일반적으로 공유하고 싶은 것들입니다. 다음은 이 기능을 가진 컴포넌트 목록입니다:
이 목록에 추가하고 싶은 것이 있다면 GitHub 이슈를 열어주세요.
복잡한 컴포넌트인 Nextjs나 StaticSite 같은 프론트엔드는 지원되지 않을 가능성이 높습니다. 이는 많은 리소스로 구성되어 있기 때문이며, 스테이지 간에 공유할 가치가 없기 때문입니다.
예제를 살펴보겠습니다.
예제
Bucket 컴포넌트의 static get 메서드는 다음과 같은 시그니처를 가집니다. 이 메서드는 컴포넌트 이름과 기존 버킷의 이름을 인자로 받습니다.
get(name: string, bucketName: string)dev 스테이지에서 버킷을 생성했다고 가정해 보겠습니다. 그리고 frank라는 개인 스테이지에서는 새로운 버킷을 생성하는 대신 dev 스테이지의 버킷을 공유하고 싶습니다.
const bucket = $app.stage === "frank" ? sst.aws.Bucket.get("MyBucket", "app-dev-mybucket-12345678") : new sst.aws.Bucket("MyBucket");여기서는 CLI가 실행 중인 현재 스테이지를 가져오기 위해 전역 변수인 $app.stage를 사용합니다. 이를 통해 조건부로 버킷을 생성할 수 있습니다.
app-dev-mybucket-12345678은 dev 스테이지에서 생성된 버킷의 자동 생성된 이름입니다. 이 이름은 dev 스테이지에서 버킷 이름을 출력하여 확인할 수 있습니다.
return { bucket: bucket.name};그리고 sst deploy를 실행하면 이 이름이 출력됩니다.
bucket: app-dev-mybucket-12345678출력에 대한 더 자세한 내용은 run 함수에서 확인할 수 있습니다.