sonatype Nexusのblob store を FileからS3に変更する

Nexus Repository OSS - Software Component Management | Sonatype という、Internal Repositoryを作成するソフトウェアがあります。

こちら、昔はデータストアとして、ディレクトリの指定しかできなかったのですが、いつからか、AWS S3が指定できるようになりました。

既存のblob storeがFILEだったのですが、管理のしやすさからS3に変更しようとしたところ、ドキュメントがいまいちみつからなかったので作業内容をメモしておきます。

FILEのpath変更については Relocating Blob Stores – Sonatype Support ドキュメントが存在します。

ファイルシステムを s3にsyncする

aws s3 sync /path/to/blobstore   s3://bucketname/prefix/to/blobstore

iam user を作成する

blob storeの設定では iam userのアクセスIDとシークレットが必須なので作成し、s3への権限を付与しておく

Nexusを停止する

nexus stop

DBを書き換える

DB接続

nexusのインストールディレクトリへ移動し、DB接続ツールを利用して接続します。

db接続pathはnexusのデータ置き場を変更していたらそのように変更します。

デフォルトでは ../sonatype-work/ がデータ置き場になっています。

cd /path/to/nexus/dir
java -jar lib/support/nexus-orient-console.jar
connect plocal:../sonatype-work/nexus3/db/config admin admin

blobstoreの確認

select * from repository_blobstore

変更したいblobstoreを確認しておく

blobstoreの変更

update repository_blobstore set type="S3" where name="変更したいblobstore"

update repository_blobstore set attributes.s3={region: 'AWSリージョン', bucket: 'bucketname', prefix: 'prefix/to/blobstore', accessKeyId: 'aws access key id', secretAccessKey: aws secret access key', expiration: -1, assumeRole: '', sessionToken: ''}  where name="変更したいblobstore"

利用するbucket、指定したprefix、iam userのID、Secretが必要です。

ここでは s3にsyncする例で記載したbucketname prefix/to/blobstore を使用しています。

expiration=-1というのは、データの保持期間を無制限にするものです。

DBの切断

exit

nexusの起動

nexus start

以上でS3へblobが変更できました。

最初からとてもポータビリティの高い仕様になっているnexusならではの移行かなと思います。