

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon S3 conda チャネルにパッケージを発行する
<a name="publish-packages-s3-channel"></a>

Conda パッケージを Amazon Simple Storage Service (Amazon S3) バケットに発行して、Deadline Cloud (Deadline Cloud) AWS ワーカーが実行中のジョブ用にインストールできるようにします。`rattler-build publish` コマンドは、ローカルファイルシステムチャネルと同じ方法で Amazon S3 で機能します。コマンドはレシピを構築して結果を公開したり、既に構築したパッケージファイルを公開したりできます。どちらの場合も、 コマンドはパッケージをバケットにアップロードし、1 つのステップでチャネルのインデックスを作成します。

`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** – サンプルリポジトリのクローン作成に必要です。ではWindows、 [の git Windows](https://gitforwindows.org/) `bash` は、Windowsサンプルレシピの一部に必要なシェルも提供します。
+ **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)を満たしていることを確認してください。

次の の例では、 の Deadline Cloud サンプルリポジトリから Blender 4.5 サンプルレシピを発行しますGitHub。 [https://github.com/aws-deadline/deadline-cloud-samples](https://github.com/aws-deadline/deadline-cloud-samples)サンプルリポジトリとは異なるレシピを置き換えるか、独自のレシピを使用できます。

**注記**  
大規模なアプリケーションでは、ソースアーカイブ、抽出されたファイル、ビルド出力に数十 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
   ```

   [`pixi run`](https://pixi.sh/latest/reference/cli/pixi/run/) コマンドは、プロジェクトディレクトリの conda 環境をアクティブ化し、その中で指定されたコマンドを実行します。環境はプロジェクトディレクトリに保持されるため、他のターミナルから同じ`pixi run`コマンドを使用できます。

## チャネルからのパッケージの削除
<a name="publish-s3-remove-packages"></a>

ロックファイルはハッシュによって特定のパッケージを参照するため、本番稼働に使用するチャネルからパッケージを削除することは避けてください。パッケージを削除すると、それらのロックファイルから環境を再作成できなくなります。開発チャネルとテストチャネルの場合、バケットから`.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
```

デバッグシェルから、ファイルの変更、個々のビルドコマンドの実行、依存関係の追加を行って問題を分離できます。詳細については、rattler-build ドキュメントの[「ビルドのデバッグ](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)」を参照してください。
+ (アドバンスト) クロスコンパイルを使用して、ワークステーションとは異なるプラットフォームのパッケージを構築します。詳細については、rattler[-build ドキュメントの「クロスコンパイル](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 チャネルからパッケージをインストールするようにキュー環境を設定します。