Artifact Registry に Go モジュールを保存する
非公開の Artifact Registry Go リポジトリを設定し、そこにモジュールをアップロードして、モジュールを依存関係として使用します。
始める前に
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
- バージョン 1.15 以降の Go をインストールします。
package-go-module
gcloud CLI アドオンをインストールします。gcloud components install package-go-module
次のコマンドを実行して新しいリポジトリを作成します。
gcloud artifacts repositories create REPOSITORY \ --repository-format=go \ --location=LOCATION \ --description=DESCRIPTION
以下を置き換えます。
次のコマンドを実行して、リポジトリの詳細を表示します。
gcloud artifacts repositories describe --location=LOCATION REPOSITORY
出力は次のようになります。
Encryption: Google-managed key Repository Size: 0.000MB createTime: '2022-06-03T20:20:01.644813Z' format: GO mode: STANDARD_REPOSITORY name: projects/my-project/locations/us-west1/repositories/my-repo updateTime: '2022-06-03T20:20:01.644813Z'
ホーム ディレクトリで、モジュール用に「foo」というディレクトリを作成します。
mkdir foo
ディレクトリをモジュールのディレクトリに変更し、
go mod init
を実行してモジュールの go.mod ファイルを作成します。cd foo \ go mod init example.com/foo
example.com/foo
は、モジュールパスに置き換えます。詳細については、Go モジュール リファレンスをご覧ください。foo ディレクトリに、次の内容の
foo.go
ファイルを作成します。package foo const HelloWorld = "Hello World!"
- PROJECT は、 Google Cloudプロジェクト ID に置き換えます。
- REPOSITORY は、パッケージが保存されるリポジトリの名前に置き換えます。
- LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションに置き換えます。
example.com/foo
は、モジュールパスに置き換えます。詳細については、Go モジュール リファレンスをご覧ください。- VERSION は、
vX.Y.Z
形式のモジュールのセマンティック バージョンに置き換えます。ここで、X
はメジャー バージョン、Y
はマイナー バージョン、Z
はパッチ バージョンです。 - SOURCE_LOCATION は、Go モジュールのルート ディレクトリのパスに置き換えます。
--source
フラグを省略した場合、デフォルトは現在のディレクトリです。 Artifact Registry、公開 Go モジュール プロキシ、ソースを次の順序でダウンロードするように Go に指示します。
export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
以下を置き換えます。
公開チェックサム データベースを使用してモジュールがチェックされないように除外します。
export GONOSUMDB=MODULE_PATH_REGEX
複数のモジュールを除外する場合は、MODULE_PATH_REGEX をモジュールパスまたは正規表現に置き換えます。
公開チェックサム データベースを使用してモジュール
example.com/foo
がチェックされないようにするには、次のコマンドを実行します。export GONOSUMDB=example.com/foo
モジュールパスが
example.com
で始まるすべてのモジュールが、公開チェックサム データベースでチェックされないようにするには、次のコマンドを実行します。export GONOSUMDB=example.com/*
- 有効期間が短い認証情報(推奨)
- Artifact Registry の Go 認証ヘルパーツールを使用して、netrc ファイル内の認証トークンを更新します。
- サービス アカウント キーを使用する
このオプションは、環境で認証に認証情報を使用できない場合に使用します。暗号化されていないサービス アカウントキーを netrc ファイルに追加します。
Go 認証ヘルパーを
GONOPROXY
に追加するexport GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
次のコマンドを実行して、Go モジュール パッケージ ツールで Artifact Registry の認証情報を netrc ファイルに追加します。
GOPROXY=proxy.golang.org \ go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.4.0 \ add-locations --locations=LOCATION \ [--json_key=path/to/service/account/key.json]
ここで、LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。複数のロケーションを追加する場合は、カンマ区切りのリストとして入力します。
Go 認証ヘルパーは、Artifact Registry の認証用の設定を netrc ファイルに追加します。
--json_key
フラグを渡すと、キーが netrc ファイルに追加され、パスワード認証が行われます。Artifact Registry に対する認証に有効期間の短い認証情報を使用している場合は、次のコマンドを実行して OAuth トークンを更新する必要があります。
GOPROXY=proxy.golang.org \ go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.4.0 refresh
ホーム ディレクトリに「bar」というディレクトリを作成します。
mkdir bar
ディレクトリをモジュールのディレクトリに変更し、
go mod init
を実行してパッケージのgo.mod
ファイルを作成します。cd bar \ go mod init example.com/bar
example.com/bar
は、モジュールパスに置き換えます。詳細については、Go モジュール リファレンスをご覧ください。Artifact Registry に保存されている foo のバージョンを必須にするには、
go.mod
ファイルを編集して次のように設定します。module example.com/bar go 1.19 require example.com/foo v0.1.0
以下を置き換えます。
example.com/foo
は、必要なモジュールのモジュールパスですv0.1.0
は Artifact Registry に保存されているバージョンです
bar
ディレクトリに、次の内容のmain.go
ファイルを作成します。package main import ( "fmt" foo "example.com/foo" ) func main() { fmt.Println(foo.HelloWorld) }
go mod tidy を実行して、foo パッケージなどの依存関係をダウンロードします。
go mod tidy
bar モジュールを実行します。
go run .
出力は次のようになります。
Hello World!
リポジトリを削除するには、次の手順を行います。
gcloud artifacts repositories delete \ --location=LOCATION \ --project=PROJECT \ REPOSITORY
以下を置き換えます。
アクティブな gcloud 構成のデフォルトのリポジトリとロケーション設定を削除するには、次のコマンドを実行します。
gcloud config unset artifacts/repository gcloud config unset artifacts/location
- 認証の構成の詳細を確認する。
- リポジトリの管理について確認する。
- Go モジュールの管理について確認する。
- DevOps に関するリソースをご覧ください。また、DevOps Research and Assessment 研究プログラムについても確認してください。
リポジトリを作成する
新しいリポジトリを作成して構成する手順は、次のとおりです。
gcloud コマンドのデフォルトを設定する
プロジェクト、リポジトリ、ロケーションの値のデフォルトを構成すると、gcloud CLI
コマンドを簡略化できます。デフォルトを構成すると、タグ --project
、--location
、--repository
は不要です。
Go モジュールをパッケージ化してアップロードする
package-go-module
gcloud CLI アドオンは Go モジュールをパッケージ化し、gcloud
コマンドを使用してバージョン管理と Artifact Registry へのアップロードを可能にします。
Go モジュールを作成する
まず、リポジトリにアップロードする単一の Go モジュールを作成します。
モジュールをパッケージ化してアップロードする
モジュールをパッケージ化してリポジトリにアップロードします。
gcloud artifacts go upload --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --module-path=example.com/foo \ --version=VERSION \ --source=SOURCE_LOCATION
以下を置き換えます。
モジュールが Artifact Registry にアップロードされます。
Go モジュールの作成方法について詳しくは、こちらのチュートリアルをご覧ください。
モジュールを一覧表示する
デフォルト値が構成されているときに、次のコマンドを実行して、デフォルトのプロジェクト、リポジトリ、ロケーションにあるアップロードされた Go モジュールを検査します。
gcloud artifacts packages list
出力は次のようになります。
Listing items under project my-project, location us-west1, repository my-repo. PACKAGE CREATE_TIME UPDATE_TIME example.com/foo 2022-06-03T20:43:39 2022-06-20T20:37:40
モジュールのバージョンの詳細を表示する
デフォルト値が構成されているときに、次のコマンドを実行して、デフォルトのプロジェクト、リポジトリ、ロケーションにあるモジュールのバージョンを表示します。
gcloud artifacts versions list --package=MODULE_PATH
出力は次のようになります。
Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo. VERSION DESCRIPTION CREATE_TIME UPDATE_TIME v0.1.0 2022-06-03T20:43:39 2022-06-03T20:43:39 v0.1.1 2022-06-20T20:37:40 2022-06-20T20:37:40
モジュールをダウンロードする
Artifact Registry に保存されているモジュールをインポートするには、Artifact Registry から依存関係を探し、チェックサム データベースをバイパスするように Go に指示する必要があります。
Go 環境を設定する
Artifact Registry に対して認証する
パッケージ化された Go モジュールをダウンロードして Artifact Registry から依存関係として使用すると、Go バイナリは netrc ファイル内の認証情報を使用して Artifact Registry に対する認証を行います。認証プロセスを簡素化するには、Go 認証ヘルパーを使用して、Artifact Registry に対する認証用の netrc ファイル内のトークンを更新します。
netrc ファイルの場所は、netrc 環境変数で設定できます。NETRC
変数が設定されていない場合、go
コマンドは UNIX のようなプラットフォームでは $HOME/.netrc
、Windows では %USERPROFILE%\_netrc
を読み取ります。
Artifact Registry では、次の認証方法がサポートされています。
Go 認証ヘルパーを GONOPROXY
に追加する
Go 認証ヘルパーを使用する前に、これを Go が GitHub から直接ダウンロードするように、GONOPROXY
リストに追加する必要があります。ソースから直接ダウンロードしたい他のモジュールがある場合は、次の例に示すように、カンマ区切りのリストに追加できます。
export GONOPROXY=MODULE_PATH1, MODULE_PATH2
MODULE_PATH1 と MODULE_PATH2 は、ソースからダウンロードするモジュールのモジュールパスです。
Go 認証ヘルパーを GONOPROXY
リストに追加し、それを実行して認証情報を設定する手順は、次のとおりです。
モジュールを依存関係として使用する
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を行います。リポジトリを削除する前に、保持する必要があるモジュールが別の場所で使用可能であることを確認してください。