Amazon Web Services ブログ

AWS CodeArtifact によるソフトウェアパッケージ管理



ソフトウェアアーティファクトリポジトリとそれに関連するパッケージマネージャーは、開発に不可欠なコンポーネントです。ライブラリが必要な時点で、パッケージマネージャーを使用してソフトウェアのビルド済みライブラリをダウンロードして参照すると、開発プロセスとビルドプロセスの両方が簡略化されます。Maven Centralnpm パブリックレジストリPyPi (Python Package Index) など、さまざまなパッケージリポジトリを使用できます。多数のアーティファクトリポジトリを操作すると、アプリケーションのソフトウェアの依存関係のバージョンとアクセスの両方を慎重に制御したい組織にいくつかの課題が生じる可能性があります。検出されておらず、悪用され得る脆弱性が組織のアプリケーションに存在するのを防ぐために、依存関係への変更はすべて制御する必要があります。一元化されたリポジトリを使用することで、組織がアクセス制御とバージョン変更を管理しやすくなり、チームは、IT リーダーが新しいバージョンの使用を承認していることを確信しながら、パッケージバージョンを更新できます。大規模な組織では、これらの課題を解決するために従来のアーティファクトリポジトリソフトウェアを使用する場合がありますが、これらの製品では、インストール、設定、メンテナンス、およびスケーリングに関するさらなる課題が発生する可能性があります。小規模な組織では、従来のアーティファクトリポジトリソフトウェアの料金とメンテナンスにかける労力が莫大なものになる場合があります。

今日一般的に利用可能な AWS CodeArtifact は、開発、構築、およびデプロイのプロセスで使用されるソフトウェアパッケージを安全に保存および共有するための、開発者および組織向けのフルマネージド型のアーティファクトリポジトリサービスです。現在、CodeArtifact は、MavenGradle (Java の場合)、npmyarn (Javascript の場合)、piptwine (Python の場合) などの一般的なビルドツールとパッケージマネージャーで使用できます。新しいパッケージが取り込まれるか、リポジトリに公開されると、CodeArtifact は自動的にスケーリングし、フルマネージド型のサービスとして、CodeArtifact は、お客様の側におけるインフラストラクチャのインストールやメンテナンスを必要としません。さらに、CodeArtifact はポリグロットアーティファクトリポジトリです。つまり、サポートされている任意のタイプのアーティファクトパッケージを格納できます。たとえば、単一の CodeArtifact リポジトリを設定して、Mavennpm、および Python リポジトリからのパッケージを 1 つの場所に格納できます。

CodeArtifact リポジトリはドメインに編成されます。組織で単一のドメインを使用してから、リポジトリを追加することをお勧めします。例えば、チームごとに異なるリポジトリを使用することを選択できます。パッケージをリポジトリに公開したり、外部リポジトリからパッケージを取り込んだりするには、開発者が慣れているパッケージマネージャーツールを使用するだけです。開始のプロセスを見てみましょう。

CodeArtifact の開始方法
CodeArtifact の使用を開始するには、まず組織用のドメインを作成する必要があります。これにより、リポジトリが集約されます。ドメインは、リポジトリから使用されますが、パッケージとメタデータの実際のストレージを実行するために使用されます。これには、特定の npm パッケージなどの単一のパッケージアセットが、リポジトリの数に関係なく、ドメインごとに 1 回だけ格納されるという利点があります。CodeArtifact コンソールで、左側のナビゲーションパネルから [ドメイン] を選択するか、代わりに、最初のリポジトリの作成の一部としてドメインを作成します。これを行うには、[リポジトリの作成] をクリックします。

最初に、リポジトリに名前と任意の説明を付け、その後に任意でリポジトリをいくつかのアップストリームリポジトリに接続することができます。リポジトリに存在しないパッケージがリクエストされると、CodeArtifact はこれらのアップストリームリポジトリからそれぞれのパッケージをプルし、CodeArtifact リポジトリにキャッシュします。CodeArtifact リポジトリは、他の CodeArtifact リポジトリのアップストリームとしても機能できることに注意してください。ここの例では、npm パブリックレジストリPyPi からパッケージをプルします。CodeArtifact は、これらの外部接続を npm-store および pypi-store として管理するために作成するリポジトリを参照します。

[次へ] をクリックして、ドメインを選択または作成します。これは、ドメインを所有するアカウントを選択し、ドメインに名前を付けることによって行います。CodeArtifact は、単一の AWS Key Management Service (KMS) キーを使用して、ドメイン内のすべてのアセットとメタデータを暗号化することに留意してください。ここでは、サービスによって作成されるキーを使用しますが、自分のキーを使用することもできます。

[次へ] をクリックすると、設定を確認するための最後の手順に進みます。選択したアップストリームリポジトリからのパッケージフローが考えたとおりになっていることを確認できます。[リポジトリの作成] をクリックするとプロセスが完了し、この例では、ドメイン、リポジトリ、およびアップストリームを表す 2 つの追加リポジトリが作成されます。

この簡単なセットアッププロセスを使用した後、ドメインとその初期リポジトリは、npm および PyPi からアップストリームにプルするように設定され、ソフトウェアアーティファクトパッケージを保持する準備が整いました。必要に応じて、リポジトリを追加することもできます。しかし、この例の次の手順では、次のように、CodeArtifact リポジトリにアクセスできるように、npm および pip のアップストリームリポジトリのパッケージマネージャーを設定します。

パッケージマネージャーの設定
さまざまなパッケージマネージャーを設定する手順はドキュメントに記載されていますが、便利なことに、リポジトリを選択するときに必要な手順がコンソールに表示されます。npm から始めます。最初に npm-pypi-example-repository を選択し、[接続手順の表示] をクリックすると、手順にアクセスできます。

表示されるダイアログで、設定するパッケージマネージャーを選択すると、関連する手順が表示されます。AWS コマンドラインインターフェイス (CLI) を使用してプロセス全体 (npmpip、および twine) を管理するか、CLI コマンドを使用してトークンを取得し、次に npm コマンドを実行してトークンをリポジトリリファレンスにアタッチするかを選択できます。

パッケージマネージャー、または従う一連の指示に関係なく、コマンドは、リポジトリのパッケージマネージャー設定に 12 時間有効な認証トークンをアタッチするだけです。トークンを更新するのを忘れないように、関連するコマンドをスタートアッププロファイルに追加して、毎日最初にトークンが自動的に更新されるようにしました。

同じガイダンスに従って、同じく AWS CLI アプローチを使用して、同様に pip を設定します。

C:\> aws codeartifact login --tool pip --repository npm-pypi-example-repository --domain my-example-domain --domain-owner ACCOUNT_ID
Writing to C:\Users\steve\AppData\Roaming\pip\pip.ini
Successfully logged in to codeartifact for pypi

これで完了です。 これで、Node.js および Python アプリケーションで依存関係の単一リポジトリを使用する準備ができました。リポジトリにまだない依存関係を追加すると、指定されたアップストリームリポジトリから取得され、CodeArtifact リポジトリに追加されます。

投稿を締めくくりとして、いくつかの簡単なテストを試してみましょう。最初に、空のディレクトリに変更した後、シンプルな npm install コマンドを実行します。この例では、AWS Cloud Development Kit をインストールします。

npm install -g aws-cdk

CodeArtifact コンソールでリポジトリを選択すると、AWS Cloud Development Kit のパッケージとその依存関係がアップストリーム npm パブリックレジストリリポジトリからダウンロードされ、リポジトリに追加されていることがわかります。

前述のとおり、CodeArtifact リポジトリはポリグロットであり、サポートされている任意のタイプのパッケージを格納できます。次に、Python パッケージを追加しましょう。この例で追加するのは、人気の画像操作ライブラリである Pillow です。

> pip3 install Pillow
Looking in indexes: https://aws:****@my-example-domain-123456789012.d.codeartifact.us-west-2.amazonaws.com/pypi/npm-pypi-example-repository/simple/
Collecting Pillow
  Downloading https://my-example-domain-123456789012.d.codeartifact.us-west-2.amazonaws.com/pypi/npm-pypi-example-repository/simple/pillow/7.1.2/Pillow-7.1.2-cp38-cp38-win_amd64.whl (2.0 MB)
     |████████████████████████████████| 2.0 MB 819 kB/s
Installing collected packages: Pillow
Successfully installed Pillow-7.1.2

コンソールでは、先ほど追加した npm パッケージの横に Python パッケージが表示されています。

コンソールを使用してアクションを確認しましたが、CLI コマンドも同様に使用できます。たとえば、リポジトリパッケージを一覧表示するには、次のコマンドを実行します。

aws codeartifact list-packages --domain my-example-domain --repository npm-pypi-example-repository

ご想像のとおり、追加のコマンドを使用して、ドメイン、リポジトリ、およびそれらに含まれるパッケージを操作できます。

利用状況
AWS CodeArtifact は、フランクフルト、アイルランド、ムンバイ、バージニア北部、オハイオ、オレゴン、シンガポール、スウェーデン、シドニー、および東京の各リージョンで一般的に利用できるようになりました。6 月 12 日正午 (PST) に Twitch.tv/aws または LinkedIn Live にぜひご参加ください。CodeArtifact の開始方法をご紹介します。

— Steve