Cloud Service
Azure Artifacts
NuGet や npm などのパッケージをフィード単位で保管・共有し上流ソースもまとめて配信するマネージドサービス。AWS の CodeArtifact に相当する。
- 1.NuGet・npm・Maven・Python・ユニバーサルパッケージをフィードで保管・共有するマネージドサービス。
- 2.上流ソースで公開レジストリをプロキシ・キャッシュし、ビューで安定版だけを段階的に公開できる。
- 3.Azure Pipelines と統合され認証や発行・取得が容易。AWS の相当サービスは CodeArtifact。
解決する課題
- 社内で作ったライブラリやパッケージを組織内で安全に共有したい(公開レジストリには置けない)
- 複数チーム・複数プロジェクトで同じ依存パッケージを一元管理し、バージョンの食い違いをなくしたい
- 公開レジストリ(nuget.org や npmjs.com など)への直接アクセスを減らし、取得を安定・高速化したい
- 検証が済んだ安定版だけを下流チームに公開し、未検証のプレリリースを混在させたくない
- パッケージの取得・発行で資格情報を平文で埋め込みたくない(CI/CD でも安全に認証したい)
主要概念と用語
- フィード(Feed): パッケージを保管・共有する単位。組織やプロジェクト単位で作成し、利用者・発行者の権限をここで管理する
- パッケージの種類: NuGet、npm、Maven、Python(PyPI 形式)、ユニバーサルパッケージなど、主要なエコシステムの形式を1つのサービスで扱える
- ユニバーサルパッケージ(Universal Packages): 特定言語に縛られない任意のファイル群をバージョン付きで保管する形式。ビルド成果物や大きなバイナリの配布に使う
- 上流ソース(Upstream Source): nuget.org や npmjs.com などの公開レジストリをフィードからプロキシ・キャッシュする仕組み。取得したパッケージはフィードに保存される
- ビュー(View): フィード内のパッケージを成熟度で段階公開する仕組み。既定で「ローカル」「プレリリース」「リリース」といった区分があり、安定版だけを下流に見せられる
- 権限ロール: 閲覧者・共同作成者・所有者などの役割でフィードへのアクセスを制御する
- 保持ポリシー(Retention Policy): 未参照の古いパッケージバージョンを自動削除し容量を抑えるルール
仕様・制限・クォータ
- NuGet・npm・Maven・Python・ユニバーサルパッケージといった主要なパッケージ形式を統合的に扱える。クライアントは各エコシステム標準のツール(nuget / npm / mvn / pip / twine など)でそのまま接続する
- フィードのスコープは組織単位またはプロジェクト単位で選べ、可視性や権限の範囲が変わる
- 上流ソースで取得したパッケージはフィードにキャッシュ保存され、以後は外部に出ずに取得できる
- ストレージ消費は保管したパッケージの実体に依存し、未参照バージョンが積み上がると容量が増えるため保持ポリシーでの整理が前提となる
- 課金は保管容量に基づく形が中心で、一定の無料枠を超えた分が従量課金になる。具体的な無料枠やレート上限は変動しうるため公式ドキュメントで最新値を確認する
内部の仕組み
Azure Artifacts は、各パッケージエコシステムの標準プロトコルに対応したマネージドなパッケージリポジトリです。利用者は nuget.org のような公開レジストリの代わりにフィードの URL をパッケージソースとして登録し、標準ツールで発行(push)や取得(restore / install)を行います。フィードは保管・権限・公開範囲を一元的に管理する境界として機能します。
上流ソースを有効にすると、フィードに無いパッケージを要求したときにフィードが公開レジストリへ代理アクセスし、取得した実体をフィード内にキャッシュします。これにより、次回以降は外部に出ずに同じバージョンを取得でき、公開レジストリの障害や削除に左右されにくくなります。自作パッケージと外部パッケージを同じフィード URL から一括取得できる点も利点です。
ビューは、同じフィード内のパッケージを成熟度のラベルで切り分ける仕組みです。発行直後はローカルやプレリリースのビューに置き、検証を通ったものだけをリリースのビューに昇格させると、下流の利用者はリリースのビューを参照するだけで安定版だけを取得できます。
公開レジストリを直接参照する代わりに、フィードの上流ソース経由で取得すると、過去に取得したバージョンがフィードにキャッシュされます。 これにより外部レジストリ側でパッケージが削除されてもビルドが壊れにくくなります。AWS の CodeArtifact で外部リポジトリをアップストリームに設定するのと同じ考え方です。
設計パターン / ベストプラクティス
- 自作パッケージと外部パッケージを同一フィードに集約し、上流ソース経由で取得を一本化する
- ビューで成熟度を分離し、下流チームにはリリースのビューだけを参照させて未検証版の混入を防ぐ
- フィードのスコープは公開範囲に合わせ、組織全体で共有するものは組織フィード、限定公開はプロジェクトフィードに分ける
- パッケージのバージョンは**不変(同じバージョンを上書きしない)**運用とし、再現性とロールバックを確保する
- CI/CD からの認証は個人アクセストークンを避け、パイプライン組み込みの認証やサービス接続を使う
- 保持ポリシーで未参照の古いバージョンを定期削除し、容量とコストを抑える
運用・監視
- パッケージの発行・取得や権限変更は Azure DevOps の監査ログで追跡し、誰がいつ何を行ったかを把握する
- パッケージが取得できない → フィードの権限ロール、パッケージソース URL、認証情報(トークンやサービス接続)の有効性を確認する
- 上流から想定バージョンが取れない → 上流ソースの設定と、そのバージョンが上流レジストリに存在するかを確認する
- 容量が増え続ける → 保持ポリシーで未参照バージョンを整理し、不要なフィードやプレリリース版を削除する
- 古い安定版に戻したい → 不変バージョン運用なら該当バージョンを指定して取得するだけで再現できる
コスト
| 項目 | 課金の考え方 |
|---|---|
| 保管容量 | 保管したパッケージの実体サイズに応じた従量課金。一定の無料枠を超えた分が対象 |
| 上流キャッシュ | 上流から取得してフィードに保存した分も保管容量に含まれる |
| 取得・発行操作 | 操作自体は基本的に容量課金の枠内で扱われ、別途のリクエスト課金が中心ではない |
| 不要バージョン | 未参照のまま放置すると容量が積み上がり保管コストが増える |
コストの主因は保管容量です。保持ポリシーで未参照バージョンを自動削除し、巨大なバイナリを安易にユニバーサルパッケージへ積み上げないことが効きます。 具体的な無料枠やレートは変動しうるため、見積もりは公式の料金ページで最新値を確認してください。
セキュリティ
- フィードは閲覧者・共同作成者・所有者などのロールで最小権限を割り当て、取得だけのチームには発行権限を渡さない
- CI/CD では個人アクセストークンの平文埋め込みを避け、パイプライン組み込みの認証やサービス接続で資格情報を扱う
- 組織外への公開範囲を絞るため、フィードのスコープと可視性を要件に合わせて設定する
- 上流ソースを使うことで外部レジストリから直接ダウンロードする経路を減らし、取得元を統制された1か所に集約できる
- パッケージは不変バージョン運用とし、同一バージョンの差し替えによる供給網の混乱を防ぐ
個人アクセストークンを nuget.config や npmrc に平文で焼き込み、リポジトリにコミットするのは NG です。 資格情報の漏洩につながります。パイプラインの組み込み認証やサービス接続を使い、トークンをコードに残さない運用にしましょう。
Well-Architected の観点
- セキュリティ: ロールベースの権限、トークンを埋め込まない認証、公開範囲の限定、上流経由での取得元一元化で、保管と配布の両面を保護する
- オペレーショナルエクセレンス: フィードとビューによる段階公開、保持ポリシー、Azure Pipelines 統合で、パッケージのライフサイクルを仕組み化する
- 信頼性: 上流ソースのキャッシュで外部レジストリの障害や削除に左右されにくくし、不変バージョンで再現性を担保する
- コスト最適化: 保持ポリシーと不要バージョンの整理、無料枠の把握で保管コストのムダを削る
試験で問われるポイント
- 「組織内で自作パッケージを共有したい」→ Azure Artifacts のフィードが定番の答え。NuGet・npm・Maven・Python・ユニバーサルパッケージを統合的に扱える
- 公開レジストリのプロキシ・キャッシュ=上流ソース。外部の削除や障害に強くしたい要件で問われる
- 安定版だけを下流に見せたい → ビューで段階公開する、という対応を押さえる
- CI/CD の認証はトークンの平文埋め込みを避ける。サービス接続やパイプライン組み込み認証が望ましい
- AWS の相当サービスは CodeArtifact。対応関係を問う設問で迷わないこと
関連サービス・比較
| 観点 | Azure Artifacts | AWS CodeArtifact |
|---|---|---|
| 位置づけ | マネージドなパッケージ保管・共有サービス | マネージドなパッケージ保管・共有サービス |
| 対応形式 | NuGet / npm / Maven / Python / ユニバーサル | npm / PyPI / Maven / NuGet など |
| 公開レジストリ連携 | 上流ソースでプロキシ・キャッシュ | 外部接続をアップストリームで連携 |
| 保管単位 | フィード(組織 / プロジェクト) | ドメインとリポジトリ |
| CI/CD 統合 | Azure Pipelines と密接に統合 | CodeBuild / CodePipeline と統合 |
| 段階公開 | ビューで成熟度を分離 | リポジトリ構成で分離 |
ハンズオン / CLI例
# Azure DevOps の拡張をインストールしてサインイン
az extension add --name azure-devops
az devops login
# 既定の組織とプロジェクトを設定
az devops configure --defaults \
organization=https://dev.azure.com/myorg \
project=myproject
# プロジェクトスコープのフィードを作成
az artifacts universal publish \
--feed myfeed \
--name mytool \
--version 1.0.0 \
--path ./dist \
--description "build artifacts"
# ユニバーサルパッケージを取得(ダウンロード)
az artifacts universal download \
--feed myfeed \
--name mytool \
--version 1.0.0 \
--path ./download
# npm から使う場合は、フィードの URL を registry として .npmrc に登録し
# パイプラインの組み込み認証で push / install する(トークンは平文で書かない)
npm publish --registry https://pkgs.dev.azure.com/myorg/_packaging/myfeed/npm/registry/
Azure Service
Azure Artifactsを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
開発者ツール
比較で見る軸
クラウド: Azure / カテゴリ: 開発者ツール / 難易度: basic
導入後に効く点
上流ソースで公開レジストリをプロキシ・キャッシュし、ビューで安定版だけを段階的に公開できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- 開発者ツール
- 難易度
- basic
- 関連資格
- —
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「開発者ツール / security」に近いか確認する。
- 強みである「NuGet・npm・Maven・Python・ユニバーサルパッケージをフィードで保管・共有するマネージドサービス。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。