Skip to content

리소스 가져오기

이전에 생성한 리소스를 앱으로 가져옵니다.

리소스 가져오기

가져오기는 이전에 생성한 리소스를 여러분의 SST 앱으로 불러오는 과정입니다. 이를 통해 SST가 앞으로 해당 리소스를 관리할 수 있게 됩니다.

이 기능은 SST로 마이그레이션하거나, 과거에 수동으로 생성한 리소스가 있을 때 유용합니다.

작동 방식

SST는 여러분의 앱 상태를 유지합니다. 이 상태는 앱이 관리하는 모든 리소스를 포함합니다.

리소스를 가져오면 이 상태에 추가됩니다. 즉, 코드에서 이 리소스를 제거하면 해당 리소스도 제거됩니다.

마치 이 리소스가 여러분의 앱에 의해 생성된 것처럼 동작합니다.


가져오지 말아야 할 경우

대부분의 경우에는 문제가 없습니다. 하지만 일부 팀에서는 이러한 리소스가 다른 팀에 의해 관리되거나 다른 IaC(Infrastructure as Code) 도구로 관리될 수 있습니다. 즉, 여러분의 앱에서 이를 관리하고 싶지 않을 수 있습니다.

이러한 경우에는 해당 리소스를 가져오지 않는 것이 좋습니다. 대신 이 리소스를 참조하는 방법을 찾아보세요.


리소스 가져오기 방법

여러분은 앱에 가져오고 싶은 리소스의 속성을 전달하여 리소스를 가져올 수 있습니다. 각 리소스는 가져올 수 있는 속성을 가지고 있으며, 이는 리소스마다 다릅니다. 아래에서 이에 대해 살펴보겠습니다.

SST 컴포넌트로 가져오는 경우, 기본 리소스에 전달하기 위해 transform을 사용해야 합니다.

두 가지 예제를 살펴보겠습니다.

  1. SST 컴포넌트로 가져오기
  2. Pulumi 리소스로 가져오기

SST 컴포넌트

다음 이름을 가진 기존 S3 버킷으로 시작해 보겠습니다.

mybucket-xnbmhcvd

이 버킷을 Bucket 컴포넌트로 가져오려고 합니다.

  1. 먼저 transformimport 옵션을 추가합니다.

    sst.config.ts
    new sst.aws.Bucket("MyBucket", {
    transform: {
    bucket: (args, opts) => {
    opts.import = "mybucket-xnbmhcvd";
    }
    }
    });

    transform.bucket는 이 컴포넌트에게 새로운 S3 버킷 리소스를 생성하는 대신 기존 버킷을 가져오려고 한다고 알려줍니다.

    이제 배포해 보겠습니다.

    sst deploy

    다음과 같은 오류가 발생할 것입니다.

    ✕ Failed
    inputs to import do not match the existing resource
    Set the following in your transform:
    - `args.bucket = "mybucket-xnbmhcvd";`
    - `args.forceDestroy = undefined;`

    이 오류는 Bucket 컴포넌트가 생성하려고 하는 리소스가 가져오려는 리소스와 일치하지 않는다는 것을 알려줍니다. 이는 이전에 SST가 기본적으로 생성하는 구성과 다른 구성으로 이 버킷을 생성했을 가능성이 있기 때문에 이해할 수 있습니다.

  2. 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
  3. 마지막으로 정리를 위해 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 리소스로 가져오려고 합니다.

  1. 먼저 import 옵션을 추가합니다.

    sst.config.ts
    new aws.s3.BucketV2("MyBucket",
    {
    objectLockEnabled: undefined
    },
    {
    import: "mybucket-xnbmhcvd"
    }
    );

    여기서 objectLockEnabled 프로퍼티는 설명을 위한 것입니다. 리소스를 생성할 때와 다른 방식으로 가져오는 경우를 보여주기 위해 추가했습니다.

    이제 배포해 보겠습니다.

    sst deploy

    다음과 같은 오류가 발생합니다.

    ✕ Failed
    inputs to import do not match the existing resource
    Set the following:
    - `objectLockEnabled: undefined,`

    이 오류는 BucketV2 컴포넌트가 생성하려는 리소스와 가져오려는 리소스가 일치하지 않는다는 것을 알려줍니다.

    이전에 정의한 구성과 현재 정의하려는 구성이 다르기 때문에 발생하는 문제입니다. 위에서 추가한 objectLockEnabled 프로퍼티를 떠올려 보세요.

  2. args 업데이트

    위 오류는 다음에 무엇을 해야 하는지 정확히 알려줍니다. 주어진 내용을 args에 추가합니다.

    sst.config.ts
    new aws.s3.BucketV2("MyBucket",
    {
    objectLockEnabled: undefined
    },
    {
    import: "mybucket-xnbmhcvd"
    }
    );

    이제 다시 배포합니다.

    sst deploy

    버킷이 성공적으로 가져와진 것을 확인할 수 있습니다.

    | Imported MyBucket aws:s3:BucketV2
  3. 마지막으로 정리를 위해 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.VpcVPC IDvpc-a01106c2
aws.iam.Role역할 이름role-name
aws.sqs.Queue큐 URLhttps://queue.amazonaws.com/80398EXAMPLE/MyQueue
aws.sns.Topic토픽 ARNarn: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.ApiAPI ID12345abcde
aws.cognito.UserPool사용자 풀 IDus-east-1_abc123
aws.apigateway.RestApiREST API ID12345abcde
aws.cloudwatch.LogGroup로그 그룹 이름my-log-group
aws.cognito.IdentityPool아이덴티티 풀 IDus-east-1:1a234567-8901-234b-5cde-f6789g01h2i3
aws.cloudfront.Distribution배포 IDE74FTE3EXAMPLE

이 목록에 추가하고 싶은 내용이 있다면 _Edit this page_를 클릭해 PR을 제출해 주세요.