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ならではの移行かなと思います。