

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon S3 conda 채널에 패키지 게시
<a name="publish-packages-s3-channel"></a>

Amazon Simple Storage Service(Amazon S3) 버킷에 conda 패키지를 게시하여 AWS Deadline Cloud(Deadline Cloud) 작업자가 실행 작업을 위해 설치할 수 있습니다. `rattler-build publish` 명령은 로컬 파일 시스템 채널과 동일한 방식으로 Amazon S3에서 작동합니다. 명령은 레시피를 빌드하고 결과를 게시하거나 이미 빌드한 패키지 파일을 게시할 수 있습니다. 두 경우 모두 명령은 패키지를 버킷에 업로드하고 한 단계로 채널을 인덱싱합니다.

`rattler-build publish` 명령은 표준 자격 증명 체인을 AWS 사용하여를 인증하므로 모든 AWS 도구처럼 AWS 구성을 사용합니다. 자격 증명 구성에 대한 자세한 내용은 *AWS Command Line Interface (AWS CLI) 사용 설명서*의 [구성 및 자격 증명 파일 설정을](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) 참조하세요.

## 사전 조건
<a name="publish-s3-prereqs"></a>

Amazon S3에 패키지를 게시하기 전에 다음 사전 조건을 완료합니다.
+ **pixi 및rattler-build** - [pixi.sh](https://pixi.sh) pixi를 설치한 다음를 설치합니다`rattler-build`.

  ```
  pixi global install rattler-build
  ```
+ **git** - 샘플 리포지토리를 복제하는 데 필요합니다. 에서 용 Windowsgit는 일부 Windows 샘플 레시피에 필요한 `bash`쉘도 제공합니다. [https://gitforwindows.org/](https://gitforwindows.org/) 
+ **Amazon S3 버킷** - conda 채널로 사용할 Amazon S3 버킷입니다. Deadline Cloud 팜의 작업 연결 버킷을 사용하거나 별도의 버킷을 생성할 수 있습니다.
+ **AWS 자격 증명** - `aws configure` 명령 또는 `aws login` 명령을 사용하여 워크스테이션에서 자격 증명을 구성합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*에서 [AWS CLI설정](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)을 참조하세요.
+ **IAM 권한** - (선택 사항) 자격 증명의 권한 범위를 줄이기 위해 Amazon S3 버킷 및 사용하는 채널 접두사(예: )에 대해 다음 권한만 부여하는 (IAM) 정책을 사용할 AWS Identity and Access Management 수 있습니다. `/Conda/*` 
  + `s3:GetObject`
  + `s3:PutObject`
  + `s3:DeleteObject`
  + `s3:ListBucket`
  + `s3:GetBucketLocation`

## Amazon S3 채널에 패키지 게시
<a name="publish-s3-procedure"></a>

`s3://` 대상과 `rattler-build publish` 함께를 사용하여 Amazon S3 conda 채널에 패키지를 게시합니다. 채널이 버킷에 없는 경우는 채널을 자동으로 `rattler-build` 초기화합니다. 시작하기 전에 [사전 조건을](#publish-s3-prereqs) 완료했는지 확인합니다.

다음 예제에서는 Blender의 [Deadline Cloud 샘플 리포지토리에서 4.5 샘플](https://github.com/aws-deadline/deadline-cloud-samples) 레시피를 게시합니다GitHub. 샘플 리포지토리에서 다른 레시피를 대체하거나 자체 레시피를 사용할 수 있습니다.

**참고**  
대규모 애플리케이션은 소스 아카이브, 추출된 파일 및 빌드 출력을 위해 수십 GB의 여유 디스크 공간이 필요할 수 있습니다. 패키지 빌드 출력을 위해 사용 가능한 공간이 충분한 디스크를 사용해야 합니다.

**Amazon S3 채널에 패키지를 게시하려면**

1. Deadline Cloud 샘플 리포지토리를 복제합니다.

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   ```

1. 디렉터리를 `conda_recipes`로 변경합니다.

   ```
   cd deadline-cloud-samples/conda_recipes
   ```

1. 다음 명령을 실행합니다. *amzn-s3-demo-bucket*을 버킷 이름으로 바꿉니다.

   ```
   rattler-build publish blender-4.5/recipe/recipe.yaml --to s3://amzn-s3-demo-bucket/Conda/Default --build-number=+1
   ```

   `/Conda/Default` 접두사는 버킷 내에서 채널을 구성합니다. 다른 접두사를 사용할 수 있지만 접두사는 채널을 참조하는 모든 명령 및 대기열 구성에서 일관되어야 합니다.

**빌드 번호 정보**  
`--build-number=+1` 옵션은 대상 채널에 이미 있는 빌드 번호를 기반으로 다음 빌드 번호를 자동으로 선택합니다. 채널에서 패키지를 덮어쓰지 않는 것이 가장 좋습니다. 패키지의 파일 이름이 동일한 경우 항상 새 빌드 번호로 빌드합니다. 를 사용하면 프로덕션 채널 또는 프로덕션을 미러링하는 스테이징 채널에 빌드할 때 이를 `--build-number=+1` 달성할 수 있습니다.  
빌드 번호를 직접 제어하려면와 같은 특정 값으로 설정할 수 있습니다`--build-number=7`. 옵션을 생략하면는 `recipe.yaml` 파일에 정의된 빌드 번호를 `rattler-build` 사용합니다.

패키지 레시피가 [conda-forge](https://conda-forge.org/)와 같은 특정 채널의 패키지에 의존하는 경우 명령에 `-c conda-forge`를 추가합니다.

로컬 빌드의 파일과 같이 이미 빌드한 패키지 `.conda` 파일을 게시할 수도 있습니다. *amzn-s3-demo-bucket*을 버킷 이름으로 바꿉니다.

```
rattler-build publish output/linux-64/blender-4.5.0-hb0f4dca_0.conda \
    --to s3://amzn-s3-demo-bucket/Conda/Default
```

## 채널 초기화 또는 재인덱싱
<a name="publish-s3-init-reindex"></a>

`rattler-build publish`를 사용하여 패키지를 게시하면 채널이 아직 없는 경우 명령이 채널을 자동으로 초기화합니다. 대부분의 경우 채널을 수동으로 초기화하거나 다시 인덱싱할 필요가 없습니다.

다음과 같은 상황에서 채널을 수동으로 초기화하거나 다시 인덱싱해야 할 수 있습니다.
+ 예를 들어 Deadline Cloud 대기열 환경이 채널에 연결할 수 있는지 확인하기 위해 패키지를 게시하기 전에 빈 채널을 생성하려고 합니다.
+ 를 사용하는 대신 Amazon S3 도구를 사용하여 `.conda` 파일을 직접 업로드하거나 삭제`rattler-build publish`했으며 채널 인덱스가 최신 상태가 아닙니다.

### 빈 채널 초기화
<a name="publish-s3-init-empty"></a>

빈 채널을 초기화하려면 `repodata.json` 파일을 생성하여 채널 접두사의 `noarch` 하위 디렉터리에 업로드합니다. *amzn-s3-demo-bucket*을 버킷 이름으로 바꿉니다.

```
echo '{"info":{"subdir":"noarch"},"packages":{},"packages.conda":{},"removed":[],"repodata_version":1}' > empty_channel_repodata.json
aws s3api put-object --body empty_channel_repodata.json --key Conda/Default/noarch/repodata.json --bucket amzn-s3-demo-bucket
```

`/Conda/Default` 접두사는 대기열 환경에서 사용하는 채널 접두사와 일치해야 합니다. 채널을 초기화한 후를 사용하여 채널에 패키지를 게시할 수 있습니다`rattler-build publish`.

### 채널 재인덱싱
<a name="publish-s3-reindex"></a>

채널 인덱스가 오래된 경우 `rattler-index`를 사용하여 채널의 패키지 파일에서 인덱스를 다시 빌드합니다. 먼저를 설치합니다`rattler-index`.

```
pixi global install rattler-index
```

그런 다음 채널을 다시 인덱싱합니다. *amzn-s3-demo-bucket*을 버킷 이름으로 바꿉니다.

```
rattler-index s3 s3://amzn-s3-demo-bucket/Conda/Default
```

## 패키지 테스트
<a name="publish-s3-test"></a>

패키지를 게시한 후 임시 pixi 프로젝트를 생성하여 패키지가 올바르게 작동하는지 확인합니다. 프로젝트는 Amazon S3 채널에서 패키지를 설치합니다.

**패키지를 테스트하려면**

1. 임시 테스트 디렉터리를 생성하고 Amazon S3 채널을 사용하여 pixi 프로젝트를 초기화합니다. *amzn-s3-demo-bucket*을 버킷 이름으로 바꿉니다.

   ```
   mkdir package-test-env
   cd package-test-env
   pixi init --channel s3://amzn-s3-demo-bucket/Conda/Default
   ```

1. 프로젝트에 패키지를 추가합니다.

   ```
   pixi add blender=4.5
   ```

1. 패키지가 올바르게 작동하는지 확인합니다.

   ```
   pixi run blender --version
   ```

   [https://pixi.sh/latest/reference/cli/pixi/run/](https://pixi.sh/latest/reference/cli/pixi/run/) 명령은 프로젝트 디렉터리에 대한 conda 환경을 활성화하고 그 안에서 지정된 명령을 실행합니다. 환경은 프로젝트 디렉터리에 유지되므로 다른 터미널에서 동일한 `pixi run` 명령을 사용할 수 있습니다.

## 채널에서 패키지 제거
<a name="publish-s3-remove-packages"></a>

Lockfile은 해시로 특정 패키지를 참조하므로 프로덕션에 사용하는 채널에서 패키지를 제거하지 마세요. 패키지를 제거하면 해당 잠금 파일에서 환경을 다시 생성할 수 없습니다. 개발 및 테스트 채널의 경우 버킷에서 `.conda` 파일을 삭제한 다음 채널을 다시 인덱싱하여 특정 패키지를 제거할 수 있습니다.

패키지 파일을 삭제한 다음 채널을 다시 인덱싱합니다. *amzn-s3-demo-bucket*을 버킷 이름으로 바꿉니다.

```
aws s3 rm s3://amzn-s3-demo-bucket/Conda/Default/linux-64/blender-4.5.0-hb0f4dca_1.conda
```

파일을 삭제한 후 채널을 다시 인덱싱하여 채널 메타데이터를 업데이트합니다. 지침은 [채널 재인덱싱을 참조하세요](#publish-s3-reindex).

패키지 파일은 `linux-64`, `win-64`또는와 같은 플랫폼별 하위 디렉터리에 저장됩니다`osx-arm64`. 하위 디렉터리의 패키지를 나열하려면 다음 명령을 실행합니다.

```
aws s3 ls s3://amzn-s3-demo-bucket/Conda/Default/linux-64/
```

## 정리
<a name="publish-s3-cleanup"></a>

테스트 후 테스트 프로젝트 디렉터리를 제거합니다.

**테스트 리소스를 정리하려면**
+ 테스트 프로젝트 디렉터리를 제거합니다.

  Linux 및에서 다음 명령을 macOS실행합니다.

  ```
  rm -rf package-test-env
  ```

  Windows (cmd)에서 다음 명령을 실행합니다.

  ```
  rmdir /s /q package-test-env
  ```

## 빌드 디버깅
<a name="publish-s3-debug"></a>

빌드에 실패하면는 사용자가 조사할 수 있도록 빌드 디렉터리를 `rattler-build` 보존합니다. 다음 명령을 실행하여 모든 환경 변수가 빌드 중에 설정된 상태로 빌드 환경에서 대화형 셸을 엽니다.

```
rattler-build debug shell
```

디버그 쉘에서 파일을 수정하고, 개별 빌드 명령을 실행하고, 종속성을 추가하여 문제를 격리할 수 있습니다. 자세한 내용은 래틀러 빌드 설명서의 빌드 [디버깅](https://rattler-build.prefix.dev/latest/debugging_builds/)을 참조하세요.

## 다른 플랫폼을 위한 패키지 빌드
<a name="publish-s3-cross-platform"></a>

명령은 `rattler-build publish` 명령이 실행되는 워크스테이션의 운영 체제에 대한 패키지를 빌드합니다. Deadline Cloud 플릿이 워크스테이션과 다른 운영 체제를 사용하거나 패키지에 다른 호스트 요구 사항이 있는 경우 다음 옵션을 사용할 수 있습니다.
+ 대상 운영 체제와 일치하는 호스트`rattler-build publish`에서를 실행합니다. 예를 들어 실행 중인 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스Linux를 사용하여 Linux플릿에 대한 패키지를 빌드합니다.
+ Deadline Cloud 패키지 빌드 대기열을 사용하여 대상 플랫폼에서 빌드를 자동화합니다. [패키지 빌드 대기열 생성을 참조하세요](automate-package-builds.md#s3-channel-create-queue).
+ (고급) 교차 컴파일을 사용하여 워크스테이션과 다른 플랫폼용 패키지를 빌드합니다. 자세한 내용은 래틀러 빌드 설명서의 [교차 컴파일](https://rattler-build.prefix.dev/latest/compilers/#cross-compilation)을 참조하세요.

## 다음 단계
<a name="publish-s3-next-steps"></a>

Amazon S3 conda 채널에 패키지를 게시한 후 채널을 사용하도록 Deadline Cloud 대기열을 구성합니다.
+ [사용자 지정 conda 패키지에 대한 프로덕션 대기열 권한 구성](configure-jobs-s3-channel.md#s3-channel-configure-permissions) - 프로덕션 대기열에 Amazon S3 conda 채널에 대한 읽기 전용 액세스 권한을 부여합니다.
+ [대기열 환경에 conda 채널 추가](configure-jobs-s3-channel.md#s3-channel-add-channel) - Amazon S3 conda 채널에서 패키지를 설치하도록 대기열 환경을 구성합니다.