Providers
프로바이더를 사용하면 클라우드 서비스와 상호작용할 수 있습니다.
프로바이더
프로바이더는 SST가 다양한 클라우드 서비스의 API와 상호작용할 수 있게 해주는 요소입니다. 이들은 sst.config.ts를 통해 설치할 수 있는 패키지입니다.
SST는 Pulumi/Terraform 위에 구축되었으며 150개 이상의 프로바이더를 지원합니다. 여기에는 AWS, Azure, GCP와 같은 주요 클라우드뿐만 아니라 Cloudflare, Stripe, Vercel, Auth0 등의 서비스도 포함됩니다.
전체 목록은 디렉토리에서 확인할 수 있습니다.
설치
앱에 프로바이더를 추가하려면 다음 명령어를 실행하세요.
sst add <provider>이 커맨드는 프로바이더를 설정에 추가하고, 필요한 패키지를 설치하며, 프로바이더의 네임스페이스를 전역 변수에 추가합니다.
SST는 이 패키지들을 내부적으로 관리하므로 sst.config.ts에서 패키지를 임포트할 필요가 없습니다.
프로바이더의 이름은 디렉토리에 있는 패키지 이름에서 가져옵니다. 예를 들어, sst add planetscale을 실행하면 sst.config.ts에 다음과 같이 추가됩니다.
{ providers: { planetscale: "0.0.7" }}앱에 여러 프로바이더를 추가할 수도 있습니다.
{ providers: { aws: "6.27.0", cloudflare: "5.37.1" }}sst add 커맨드에 대해 더 알아보세요.
설정
sst.config.ts 파일에서 프로바이더를 설정할 수 있습니다. 예를 들어 AWS의 리전을 변경하려면 다음과 같이 설정합니다.
{ providers: { aws: { region: "us-west-2" } }}각 프로바이더에서 설정할 수 있는 옵션 목록은 해당 프로바이더 문서에서 확인할 수 있습니다. 예를 들어, AWS와 Cloudflare의 설정 옵션을 참고하세요.
버전
기본적으로 SST는 최신 버전을 설치합니다. 특정 버전을 사용하려면 설정에서 변경할 수 있습니다.
{ providers: { aws: { version: "6.27.0" } }}설정에서 providers를 변경하면 sst install을 실행해야 합니다.
프로바이더의 버전은 항상 sst.config.ts에 지정된 버전으로 고정되며 자동으로 업데이트되지 않습니다. 버전이 설정되어 있지 않은 경우에도 마찬가지입니다. 이는 개발 워크플로 중간에 프로바이더가 업데이트되지 않도록 하기 위함입니다.
따라서 업데이트하려면 수동으로 변경한 후 sst install을 실행해야 합니다.
Credentials
대부분의 프로바이더는 환경 변수에서 자격 증명을 읽어옵니다. 예를 들어, Cloudflare의 경우 토큰을 다음과 같이 설정할 수 있습니다.
export CLOUDFLARE_API_TOKEN=aaaaaaaa_aaaaaaaaaaaa_aaaaaaaa그러나 일부 프로바이더는 설정 파일을 통해 자격 증명을 전달할 수도 있습니다.
{ providers: { cloudflare: { apiToken: "aaaaaaaa_aaaaaaaaaaaa_aaaaaaaa" } }}프로바이더 설정에 대해 더 알아보세요.
컴포넌트
프로바이더 패키지에는 여러분의 앱에서 사용할 수 있는 컴포넌트가 포함되어 있습니다.
예를 들어, sst add aws를 실행하면 aws 네임스페이스 아래의 모든 컴포넌트를 사용할 수 있습니다.
new aws.s3.BucketV2("b", { bucket: "mybucket", tags: { Name: "My bucket" }});프로바이더의 컴포넌트 외에도 SST에는 내장 컴포넌트 목록이 있습니다. 이들은 일반적으로 앱에 기능을 쉽게 추가할 수 있도록 해주는 고수준 컴포넌트입니다.
사이드바에서 이들을 확인할 수 있습니다. 컴포넌트에 대해 더 알아보세요.
함수들
컴포넌트 외에도 프로바이더가 제공하는 여러 함수들이 있습니다. 이 함수들은 Pulumi 문서에서 사이드바에 getXXXXXX 형태로 나열되어 있습니다.
예를 들어, 여러분의 앱에서 사용 중인 AWS 계정 정보를 가져오려면 다음과 같이 할 수 있습니다.
const current = await aws.getCallerIdentity({});
const accountId = current.accountId;const callerArn = current.arn;const callerUser = current.userId;또는 현재 리전 정보를 가져오려면 다음과 같이 할 수 있습니다.
const current = await aws.getRegion({});
const region = current.name;출력 버전
위의 메서드는 Promise를 반환하는 비동기 메서드입니다. 앱에서 이를 호출하면, 이후에 정의된 리소스의 배포가 블로킹될 수 있습니다.
따라서 이러한 함수의 출력 버전을 사용하는 것을 권장합니다. 예를 들어, 위의 값을 함수의 환경 변수로 설정하려면 다음과 같이 할 수 있습니다.
new sst.aws.Function("MyFunction", { handler: "src/lambda.handler", environment: { ACCOUNT: aws.getCallerIdentityOutput({}).accountId, REGION: aws.getRegionOutput().name }});aws.getXXXXOutput 함수는 일반적으로 Output<primitive> 타입의 객체를 반환합니다. 출력(Outputs)에 대해 더 알아보세요.
인스턴스
여러분은 설정 파일에 있는 프로바이더의 여러 인스턴스를 생성할 수 있습니다. 기본적으로 SST는 sst.config.ts 파일에서 각 프로바이더의 기본값으로 하나의 인스턴스를 생성합니다. 하지만 앱 내에서 여러 인스턴스를 만들 수 있습니다.
const useast1 = new aws.Provider("AnotherAWS");이 기능은 다중 리전 또는 다중 계정 배포에 유용합니다.
멀티 리전
여러분의 앱에서 일부 리소스는 한 리전으로 가야 하고, 다른 리소스는 별도의 리전으로 가야 하는 경우 여러 프로바이더를 생성할 수 있습니다.
예제를 살펴보겠습니다. 앱이 일반적으로 us-west-1에 배포된다고 가정해 보겠습니다. 하지만 us-east-1에 배포해야 하는 ACM 인증서를 생성해야 합니다.
const useast1 = new aws.Provider("useast1", { region: "us-east-1" });
new sst.aws.Function("MyFunction, "src/lambda.handler");
new aws.acm.Certificate("cert", { domainName: "foo.com", validationMethod: "EMAIL",}, { provider: useast1 });여기서 함수는 기본 리전인 us-west-1에 생성됩니다. 반면 인증서는 us-east-1에 생성됩니다.