리소스 가져오기
이전에 생성한 리소스를 앱으로 가져옵니다.
리소스 가져오기
가져오기는 이전에 생성한 리소스를 여러분의 SST 앱으로 불러오는 과정입니다. 이를 통해 SST가 앞으로 해당 리소스를 관리할 수 있게 됩니다.
이 기능은 SST로 마이그레이션하거나, 과거에 수동으로 생성한 리소스가 있을 때 유용합니다.
작동 방식
SST는 여러분의 앱 상태를 유지합니다. 이 상태는 앱이 관리하는 모든 리소스를 포함합니다.
리소스를 가져오면 이 상태에 추가됩니다. 즉, 코드에서 이 리소스를 제거하면 해당 리소스도 제거됩니다.
마치 이 리소스가 여러분의 앱에 의해 생성된 것처럼 동작합니다.
가져오지 말아야 할 경우
대부분의 경우에는 문제가 없습니다. 하지만 일부 팀에서는 이러한 리소스가 다른 팀에 의해 관리되거나 다른 IaC(Infrastructure as Code) 도구로 관리될 수 있습니다. 즉, 여러분의 앱에서 이를 관리하고 싶지 않을 수 있습니다.
이러한 경우에는 해당 리소스를 가져오지 않는 것이 좋습니다. 대신 이 리소스를 참조하는 방법을 찾아보세요.
리소스 가져오기 방법
여러분은 앱에 가져오고 싶은 리소스의 속성을 전달하여 리소스를 가져올 수 있습니다. 각 리소스는 가져올 수 있는 속성을 가지고 있으며, 이는 리소스마다 다릅니다. 아래에서 이에 대해 살펴보겠습니다.
SST 컴포넌트로 가져오는 경우, 기본 리소스에 전달하기 위해 transform을 사용해야 합니다.
두 가지 예제를 살펴보겠습니다.
- SST 컴포넌트로 가져오기
- Pulumi 리소스로 가져오기
SST 컴포넌트
다음 이름을 가진 기존 S3 버킷으로 시작해 보겠습니다.
mybucket-xnbmhcvd이 버킷을 Bucket 컴포넌트로 가져오려고 합니다.
-
먼저
transform에import옵션을 추가합니다.sst.config.ts new sst.aws.Bucket("MyBucket", {transform: {bucket: (args, opts) => {opts.import = "mybucket-xnbmhcvd";}}});transform.bucket는 이 컴포넌트에게 새로운 S3 버킷 리소스를 생성하는 대신 기존 버킷을 가져오려고 한다고 알려줍니다.이제 배포해 보겠습니다.
sst deploy다음과 같은 오류가 발생할 것입니다.
✕ Failedinputs to import do not match the existing resourceSet the following in your transform:- `args.bucket = "mybucket-xnbmhcvd";`- `args.forceDestroy = undefined;`이 오류는
Bucket컴포넌트가 생성하려고 하는 리소스가 가져오려는 리소스와 일치하지 않는다는 것을 알려줍니다. 이는 이전에 SST가 기본적으로 생성하는 구성과 다른 구성으로 이 버킷을 생성했을 가능성이 있기 때문에 이해할 수 있습니다. -
args업데이트위 오류는 다음에 무엇을 해야 하는지 정확히 알려줍니다. 주어진 줄을
transform에 추가합니다.sst.config.ts new sst.aws.Bucket("MyBucket", {transform: {bucket: (args, opts) => {args.bucket = "mybucket-xnbmhcvd";args.forceDestroy = undefined;opts.import = "mybucket-xnbmhcvd";}}});이제 다시 배포합니다.
sst deploy버킷이 성공적으로 가져와진 것을 확인할 수 있습니다.
| Imported MyBucket aws:s3:BucketV2 -
마지막으로 정리를 위해
import줄을 제거할 수 있습니다.sst.config.ts new sst.aws.Bucket("MyBucket", {transform: {bucket: (args, opts) => {args.bucket = "mybucket-xnbmhcvd";args.forceDestroy = undefined;opts.import = "mybucket-xnbmhcvd";}}});이제 이 버킷은 여러분의 앱에서 관리되며, 평소처럼 배포할 수 있습니다.
args변경 사항을 제거하지 마세요.args.bucket프로퍼티는 SST가 생성한 이름이기 때문에 중요합니다. 이를 제거하면 SST가 새로운 버킷 이름을 생성하고 이전 버킷을 제거할 수 있습니다!
Pulumi 리소스
SST 앱에 내장된 SST 컴포넌트가 없는 리소스를 가져오고 싶을 수도 있습니다. 이 경우, 저수준 Pulumi 리소스로 가져올 수 있습니다.
동일한 S3 버킷 예제를 살펴보겠습니다. 다음과 같은 이름의 기존 버킷이 있다고 가정해 보겠습니다.
mybucket-xnbmhcvd이 버킷을 aws.s3.BucketV2 리소스로 가져오려고 합니다.
-
먼저
import옵션을 추가합니다.sst.config.ts new aws.s3.BucketV2("MyBucket",{objectLockEnabled: undefined},{import: "mybucket-xnbmhcvd"});여기서
objectLockEnabled프로퍼티는 설명을 위한 것입니다. 리소스를 생성할 때와 다른 방식으로 가져오는 경우를 보여주기 위해 추가했습니다.이제 배포해 보겠습니다.
sst deploy다음과 같은 오류가 발생합니다.
✕ Failedinputs to import do not match the existing resourceSet the following:- `objectLockEnabled: undefined,`이 오류는
BucketV2컴포넌트가 생성하려는 리소스와 가져오려는 리소스가 일치하지 않는다는 것을 알려줍니다.이전에 정의한 구성과 현재 정의하려는 구성이 다르기 때문에 발생하는 문제입니다. 위에서 추가한
objectLockEnabled프로퍼티를 떠올려 보세요. -
args업데이트위 오류는 다음에 무엇을 해야 하는지 정확히 알려줍니다. 주어진 내용을
args에 추가합니다.sst.config.ts new aws.s3.BucketV2("MyBucket",{objectLockEnabled: undefined},{import: "mybucket-xnbmhcvd"});이제 다시 배포합니다.
sst deploy버킷이 성공적으로 가져와진 것을 확인할 수 있습니다.
| Imported MyBucket aws:s3:BucketV2 -
마지막으로 정리를 위해
import줄을 제거합니다.sst.config.ts new aws.s3.BucketV2("MyBucket",{objectLockEnabled: undefined},{import: "mybucket-xnbmhcvd"});이제 이 버킷은 여러분의 앱에서 관리되며, 평소처럼 배포할 수 있습니다.
리소스 임포트 속성
위 예제에서는 버킷 이름을 사용해 버킷을 임포트했습니다. AWS는 내부적으로 버킷 이름을 사용해 조회를 수행하기 때문에 버킷 이름이 필요합니다. 하지만 이는 리소스마다 다릅니다.
따라서 여러분이 자주 임포트할 만한 주요 리소스와 임포트 시 사용할 속성 목록을 정리했습니다.
리소스 문서의 Import 섹션에서 이 정보를 확인할 수 있습니다. 예를 들어, aws.s3.BucketV2 문서를 참고하세요.
아래 표는 주어진 리소스를 임포트할 때 import 속성에 전달해야 하는 속성을 나열합니다.
예를 들어, aws.s3.BucketV2의 경우 속성은 _버킷 이름_이며, some-unique-bucket-name과 같은 형태입니다.
| 리소스 | 속성 | 예제 |
|---|---|---|
aws.ec2.Vpc | VPC ID | vpc-a01106c2 |
aws.iam.Role | 역할 이름 | role-name |
aws.sqs.Queue | 큐 URL | https://queue.amazonaws.com/80398EXAMPLE/MyQueue |
aws.sns.Topic | 토픽 ARN | arn:aws:sns:us-west-2:0123456789012:my-topic |
aws.rds.Cluster | 클러스터 식별자 | aurora-prod-cluster |
aws.ecs.Service | 클러스터 및 서비스 이름 | cluster-name/service-name |
aws.ecs.Cluster | 클러스터 이름 | cluster-name |
aws.s3.BucketV2 | 버킷 이름 | bucket-name |
aws.kinesis.Stream | 스트림 이름 | my-kinesis-stream |
aws.dynamodb.Table | 테이블 이름 | table-name |
aws.lambda.Function | 함수 이름 | function-name |
aws.apigatewayv2.Api | API ID | 12345abcde |
aws.cognito.UserPool | 사용자 풀 ID | us-east-1_abc123 |
aws.apigateway.RestApi | REST API ID | 12345abcde |
aws.cloudwatch.LogGroup | 로그 그룹 이름 | my-log-group |
aws.cognito.IdentityPool | 아이덴티티 풀 ID | us-east-1:1a234567-8901-234b-5cde-f6789g01h2i3 |
aws.cloudfront.Distribution | 배포 ID | E74FTE3EXAMPLE |
이 목록에 추가하고 싶은 내용이 있다면 _Edit this page_를 클릭해 PR을 제출해 주세요.