AWS CodeArtifact は、フルマネージド型のアーティファクトリポジトリサービスであり、ソフトウェア開発プロセスで使用されるソフトウェアパッケージを、あらゆる規模の組織が安全に保存、公開、および共有することを容易にします。CodeArtifact は、Maven と Gradle (Java)、npm と yarn (JavaScript)、pip と twine (Python)、もしくは NuGet (.NET) などの、一般的に使用されるパッケージマネージャーおよびビルドツールと連携して動作します。
CodeArtifact に前払い料金などの義務はありません。保存されたソフトウェアパッケージ、行われたリクエストの数、および AWS リージョンの外部に転送されたデータについてのみ支払います。CodeArtifact には、ストレージとリクエストについての毎月の無料利用枠が含まれています。料金の詳細については、料金の詳細をご参照ください。
CodeArtifact は、次の 13 の AWS リージョンで使用できます。
AWS マネジメントコンソール、SDK、または CLI を使用して新しいドメインとリポジトリを作成することで、CodeArtifact の使用を開始できます。次に、npm または yarn CLI (JavaScript)、Maven または Gradle (Java)、pip (Python)、あるいは NuGet (.NET) など、人気のあるパッケージマネージャーやビルドツールを使用して、リポジトリにパッケージを公開できます。また、npm Registry、Maven Central、Python Package Index (PyPI)、NuGet.org などのパブリックなリポジトリから、CodeArtifact リポジトリを介して、そこに保存された使用方法が同様な他のパッケージとともに、オープンソースパッケージを利用することもできます。
ドメインは CodeArtifact 固有の構造であり、複数の AWS アカウントにわたって単一の組織が所有する複数の CodeArtifact リポジトリをグループ化および管理できます。例えば、組織は、チーム間でパッケージを共有するための中央リポジトリと、単一のチームまたはアプリケーションによってのみ使用されるパッケージを保存するためのプロジェクトレベルのリポジトリを作成する場合があります。
CodeArtifact リポジトリには、パッケージバージョンのセットが含まれており、それぞれがアセットのセットにマップされています。リポジトリはポリグロットです。単一のリポジトリに、サポートされている任意のタイプのパッケージを複数含めることができます。各リポジトリは、npm CLI、Maven CLI (mvn)、pip、NuGet などのツールを使用してパッケージをフェッチおよび公開するためのエンドポイントを公開します。 AWS CodeArtifact のリソース制限については、AWS CodeArtifact クォータを参照してください。
コンソールウィザードを使用するか、AWS SDK または CLI を使用してプログラムでリポジトリを作成できます。詳細については、AWS CodeArtifact ドキュメントの Create a repository を参照してください。
npm または yarn (JavaScript)、Maven または Gradle (Java)、twinee (Python)、NuGet (.NET) など、各言語でのネイティブなツールを使用してアーティファクトを公開できます。例えば、npm を使用して新しいパッケージバージョンを公開するには、2 つのコマンドが必要です。まず、CodeArtifact CLI の “login” コマンドを実行し、次に “npm publish” を実行してパッケージをリポジトリにアップロードします。AWS CodeBuild で同じコマンドを実行して、継続的インテグレーション (CI) ワークフローの一部として新しいパッケージバージョンを公開できます。詳細はこちらをご覧ください。
言語固有のツールを使用してアーティファクトをフェッチできます。例えば、npm パッケージである webpack とそのすべての依存関係をインストールするには、CodeArtifact CLI の「login」コマンドを実行してから、npm install webpack を実行します。npm は、CodeArtifact から webpack をフェッチし、webpack の package.json ファイルの情報に基づいて依存関係の解決を実行してから、CodeArtifact から必要なすべての依存関係を再帰的にフェッチします。 詳細はこちらをご覧ください。
CodeArtifact コンソールで、外部接続を使用してリポジトリを作成し、npm レジストリなどのパブリックリポジトリからパッケージをプルします。AssociateExternalConnection API を使用して、CodeArtifact リポジトリとパブリックリポジトリの間の接続を作成することもできます。パッケージがリクエストされると、CodeArtifact は必要なパッケージを外部リポジトリからプルしてキャッシュします (それらのパッケージがまだ存在しない場合)。
最初に、AWS CLI をインストールし、CodeArtifact にアクセスするための適切なアクセス許可を持つ IAM ユーザーまたはロールの AWS 認証情報を設定します。その後、CLI を使用して CodeArtifact の GetAuthorizationToken API を呼び出すことができます。この API は、パッケージマネージャーとビルドツールによって作成された rvequests の HTTP Authorization ヘッダーに含めることができる認証トークンを提供します。CLI は、GetAuthorizationToken を呼び出すログインコマンドを提供し、すべてのリクエストにこのトークンを使用するようにパッケージマネージャーを自動的に設定します。これは、Amazon ECR が提供する get-login コマンドに似ているため、Docker CLI を使用して ECR を操作したことのあるデベロッパーは、このパターンに慣れています。
はい。CodeArtifact リポジトリは、クロスアカウントアクセスを可能にするリソースポリシーをサポートしています。コンソールまたは AWS CLI を介してリソースポリシーを追加できます。
はい。CodeArtifact は、パッケージレベルでの書き込みのためのアクセス許可をサポートしています。これらを設定するには、パッケージ ARN をリソースとして指定するステートメントをリポジトリリソースポリシードキュメントに追加します。CodeArtifact は、リポジトリレベルでの読み取りのためのアクセス許可のみをサポートします。つまり、特定の IAM プリンシパルは、リポジトリ内のすべてのパッケージを読み取るか、どれも読み取ることができないかのいずれかです。
はい。CodeArtifact によって保存されたすべてのパッケージは、TLS を使用して転送中に暗号化され、AES-256 対称鍵暗号化を使用して保存時に暗号化されます。CodeArtifact は、AWS Key Management Service (KMS) のお客様が管理する CMK と AWS が管理する CMK の両方をサポートしています。
はい。CodeBuild プロジェクト設定でパッケージを使用および公開するために使用する CodeArtifact リポジトリを指定できます。使用可能な CodeBuild イメージには、CodeArtifact でサポートされているすべてのパッケージタイプのためのクライアントツールが含まれています。CodeBuild は、指定されたリポジトリを使用するようにビルドツールまたはパッケージマネージャーを設定し、ビルドの IAM ロールを使用してビルドの開始時に CodeArtifact 認証トークンをフェッチします。ビルドの完了時に CodeArtifact リポジトリに公開する必要があるビルドアーティファクトを指定することもできます。CodeBuild のビルドは、その内容が変更されたときに CodeArtifact リポジトリによって発行される CloudWatch Events を使用してトリガーできます。
はい。Amazon EventBridge を使用すると、CodeArtifact リポジトリに保存されているパッケージが変更したとき(たとえば、パッケージの新しいバージョンが公開されたとき)に、CodePipeline の構築をトリガーできます。
はい。CloudFormation を用いて、ドメインやリポジトリなどの CodeArtifact リソースを作成できます。詳細については、CodeArtifact のドキュメントをご参照ください。