🐙

CodeArtifactの超詳細解説

2023/11/07に公開

はじめに

この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧はこちら

この記事ではCodeArtifactとはどういうサービスで何ができるのかを超詳細にまとめています。

具体的には以下流れで説明します。

  • AWS CodeArtifactとは
  • AWS CodeArtifactの仕組み
  • AWS CodeArtifactのセキュリティ
  • AWS CodeArtifact for Advance

AWSの区分でいう「Level 200:トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

この記事を読んでほしい人

  • CodeArtifactがどういうサービスか説明できるようになりたい人
  • CodeArtifactを採用するときのベストプラクティスを説明できるようになりたい人
  • AWS Certified DevOps Engineer Professionalを目指している人

AWS CodeArtifactとは

AWS CodeArtifactはアーティファクト管理ツールです。

ちなみに、アーティファクト管理とは相互に依存するソフトウェアパッケージの依存関係を管理することです。
そして、代表的なパブリックのアーティファクトリポジトリにはMavenやnpmなどが存在します。

AWS CodeArtifactはこれらのリポジトリと連携して独自のリポジトリを作ることができるサービスです。

企業で開発を行っていると、承認されたパッケージのみ利用させたい、という場面が多々出てきます。
その時にAWS CodeArtifactを利用すると、簡単にこの要件を実現できます。

また、EventBridgeと連携が可能なのでCodeArtifactでパッケージ更新があったときにイベント駆動での通知やパイプラインのキックが可能です。

これによって、パッケージが更新されたら自動でアプリケーションを再ビルド、再デプロイできるようになるので運用コストを下げたいと思っている人は実装の価値が非常に大きいです。

AWS CodeArtifactの仕組み

外部接続

AWS CodeArtifactから外部のリポジトリを見に行くためには外部接続を作成する必要があります。
これによりCodeArtifact内に存在しないパッケージを取得することが可能になります。

注意点としては1つのリポジトリにつき1つの外部接続しか作成できない点です。
そのため、npmとMavenを1つのリポジトリに接続することはできません。

これを実現したい場合には後述するアップストリームリポジトリの仕組みを活用するのがベストプラクティスです。

ドメイン

ドメインはAWS CodeArtifactのリポジトリを仮想的に束ねるグループのようなものです。
ドメインはクロスアカウントで構築することができ、ドメイン内ではパッケージシェアが可能です。

つまり、各アカウントで共通して利用するパッケージを一か所で持つだけで済むようにできるためパッケージを保存するためのストレージコストの削減につながります。

AWS CodeArtifactのセキュリティ

AWS CodeArtifactはクロスアカウントでのパッケージ読み取りが可能です。
デフォルトではクロスアカウントで読み取りできないので、実装したい場合にはCodeArtifactのリソースポリシーでアクセスを許可しましょう。

また、ドメイン内のすべてのアセットとメタデータはKMSを用いた暗号化が施されます。

AWS CodeArtifact for Advance

アップストリームリポジトリ

AWS CodeArtifactのリポジトリは多段構成にすることが可能です。
これは複数の外部リポジトリを1つのリポジトリのように扱いたい場合に有用です。

AWS CodeArtifactのリポジトリと外部接続のリポジトリは1対1にする必要があります。
しかし、実プロジェクトではnpmも見たいしMavenも見たいということはよくある話です。

そこで使うのがアップストリームリポジトリです。

外部リポジトリを見に行くリポジトリと別にもう1つリポジトリを作成し、それを見に行くことであたかも複数の外部リポジトリを見に行くことができるような作りにすることが可能です。

リテンション

アップストリームを用いた多段構成を作った場合、外部接続している側であるアップストリームリポジトリが更新されても開発者が参照している側であるダウンストリームリポジトリはその影響を受けません。

そのため、ダウンストリームリポジトリを更新したければ再度、新しいパッケージを要求する必要があるので注意しましょう。

また、中間リポジトリはパッケージを保持しない点も注意しましょう。

まとめ

この記事ではCodeArtifactとはどういうサービスで何ができるのかを超詳細にまとめました。

  • AWS CodeArtifactとは
  • AWS CodeArtifactの仕組み
  • AWS CodeArtifactのセキュリティ
  • AWS CodeArtifact for Advance

次回はAmazon CodeGuruを超解説します。

Discussion