Terraform ProviderプラグインでArtifactoryを量産
エンタープライズDevOpsの管理には大規模なチームが必要であり、バイナリリポジトリ管理にも大規模なチームが必要になることがあります。チームメンバー全員が同じ方向へ迅速に進む必要があります。
成長し続ける開発者組織は高可用性とマルチサイト・リポジトリ・レプリケーションのために、複数ノード上にArtifactoryのインスタンスを複数構築して利用しています。これらを一度に同じリポジトリ、ユーザー、権限のセットで効果的かつ正確に設定することは困難です。
Artifactory Providerプラグイン for Terraformでインフラストラクチャ管理ツールを使用して、Artifactoryインスタンスを構成することができます。インストール直後から自動化により、同一のArtifactoryサーバーを複製することができます。
Terraformは安全かつ再現性の高い方法でインフラストラクチャの構築、変更、管理を可能にするHashiCorpが提供するInfrastructure as Codeツールです。HashiCorp Configuration Language (HCL)と呼ばれる設定言語を使用し、オペレータやインフラストラクチャチームは人が読める自動化されたデプロイメントを通して環境の管理ができます。
Artifactory Provider for TerraformはHCLを拡張してArtifactoryインスタンスに対してコマンドが実行できる無償のプラグインです。インフラストラクチャ管理者はTerraformスクリプトを介してArtifactoryリポジトリ、パーミッションなどを設定することができます。
一度、Artifactoryの設定が自動化できれば、Artifactoryの数百のインスタンスに対して、それらの設定を簡単に迅速かつ確実に複製することができます。
Artifactory Providerの利用
以下のスニペットを.tfファイルに追加し、Terraformスクリプトでプラグインを有効にします。required_providersはTerraformレジストリからプラグインを自動的にロードします。
terraform {
required_providers {
artifactory = {
source = "jfrog/artifactory"
version = "2.2.4"
}
}
}
variable "artifactory_url" {
description = "The base URL of the Artifactory deployment"
type = string
}
variable "artifactory_username" {
description = "The username for the Artifactory administrator"
type = string
}
variable "artifactory_password" {
description = "The password for the Artifactory administrator"
type = string
}
provider "artifactory" {
# Configuration options
url = "${var.artifactory_url}"
username = "${var.artifactory_username}"
password = "${var.artifactory_password}"
}
セキュリティのベストプラクティスとして、絶対にシークレット(Artifactoryのユーザー名やパスワードなど)を平文でTerraformファイルに含めないことです。上記の例ではシークレットとArtifactoryデプロイメントのベースURLを格納するためにTerraform環境変数を使用しています。他の方法についてはguide to managing secrets for Terraformを参照してください。
この例ではベーシック認証を使用してArtifactoryにアクセスする方法を示しています。必要に応じて、access_tokenまたはapi_keyを利用して認証することもできます。
Artifactoryリポジトリの設定
Artifactory Terraform Providerを使用してローカルリポジトリを設定する場合はTerraformスクリプトにresourceを追加する必要があります:
# Create a new repository
resource "artifactory_local_repository" "pypi-libs" {
key = "terraform-pypi-libs"
package_type = "pypi"
repo_layout_ref = "simple-default"
description = "A pypi repository for python packages"
}
上記の例ではシンプルなデフォルトのリポジトリレイアウトを使用して terraform-pypi-libsという名前の新しいPyPiローカルリポジトリを作成しています。
また、他のArtifactory Providerのresourceタイプを使用して、リモートリポジトリやバーチャルリポジトリを設定することもできます。
Artifactoryユーザー、グループ、パーミッションの設定
Terraformスクリプトにresourceを追加し、独自のパーミッションでArtifactoryリポジトリにアクセスできるユーザーとグループを設定できます。
例えばフロントエンド開発チーム用に作成したリポジトリにアクセスできるユーザーのセットのスクリプトを作成できます。
# Create a new Artifactory group for the team
resource "artifactory_group" "fe-group" {
name = "fe-dev"
description = "Front End Development Team"
admin_privileges = false
}
# Create new Artifactory users for the team
resource "artifactory_user" "fe-user-lead" {
name = "aliyahm"
email = "aliyahm@mycompany.com"
groups = ["logged-in-users", "readers", “fe-dev”]
password = ${var.artifactory_default_pw}
}
resource "artifactory_user" "fe-user-dev1" {
name = "sanjayr"
email = "sanjayr@mycompany.com"
groups = ["logged-in-users", "readers", “fe-dev”]
password = ${var.artifactory_default_pw}
}
resource "artifactory_user" "fe-user-dev2" {
name = "ericb"
email = "ericb@mycompany.com"
groups = ["logged-in-users", "readers", “fe-dev”]
password = ${var.artifactory_default_pw}
}
# Create a new Artifactory permission target called fe-perm
resource "artifactory_permission_target" "fe-perm" {
name = "fe-perm"
repo {
includes_pattern = ["foo/**"]
excludes_pattern = ["bar/**"]
repositories = ["terraform-pypi-libs"]
actions {
users {
name = "markz"
permissions = ["read", "write"]
}
groups {
name = “fe-dev”
permissions = ["read", "write"]
}
}
}
}
追加のResourceオプション
リポジトリと認証情報の管理に加えて、Artifactory Terraform Providerは以下をサポートしています:
レプリケーションの設定
Providerを介して、Artifactoryリポジトリのレプリケーションを作成し、管理することができます。マルチサイトレプリケーションと単一Artifactoryレプリケーションが利用できます。
証明書
Artifactory証明書resourceはリモートリポジトリに対するクライアント認証のための Artifactory証明書を作成して管理するために使用できます。
データソース
データソースはTerraform設定を他の場所で使用するためのデータの取得を可能にします。ArtifactoryリポジトリファイルのデータソースとArtifactoryリポジトリに格納されたファイルのメタデータを利用できるようにします。
Terraformの実行
Terraformスクリプトの作成後、Terraformで実行します。
ベーシック認証を使用する場合は環境変数にクレデンシャルを設定する必要があります:
$ export TF_VAR_artifactory_url=https://artifactory.mycompany.com/artifactory
$ export TF_VAR_artifactory_username=
$ export TF_VAR_artifactory_password=
その後、設定ファイルをデプロイし、ディレクトリを初期化するためにterraform initコマンドを実行します:
$ terraform init
設定後、terraform applyコマンドでArtifactoryを設定することができます。
$ terraform apply
詳しく知る
Artifactory Providerを使用することでTerraform State管理などのすべての機能に準拠して、バイナリリポジトリ管理を自動化されたインフラストラクチャ構成に含めることができます。
詳細については、Artifactory Providerのドキュメントを参照してください。
JFrog/Hashicorp webinarでは両社のエキスパートがチームのアーティファクト・エクスペリエンスの向上を目的としたベストプラクティスを紹介します。
HashiCorpとJFrogを利用すればアプリケーション・インフラストラクチャをエンドツーエンドで自動化することができます。