【AWS】AWS CodeArtifact ~ SBTでCodeArtifactを使う ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/12/26/012343
https://dk521123.hatenablog.com/entry/2024/01/11/233802
https://dk521123.hatenablog.com/entry/2024/01/14/005148

の続き。

 AWS CodeArtifact の公式ドキュメントでは、
MavenやGradleに関しての記述はある(※)が、
「"SBT"でCodeArtifactを使う」に関してはない。

そこで、今回は、「SBTでCodeArtifactを使う」の
構築手順をメモってみた。

MavenでCodeArtifactを使う
https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/using-maven.html
※ Gradle で CodeArtifact を使用する
https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/maven-gradle.html

目次

【0】前提条件
  1)ベースとなる知識
【1】Step1: ~/.sbt/repositories の追加
【2】Step2: ~/.sbt/.credentials の追加
【3】Step3: ~/.sbt/.credentials の指定
 1)やり方1:環境変数「SBT_CREDENTIALS」
 2)やり方2:system property「sbt.boot.credentials」
 3)やり方3:build.sbt への追加
 4)やり方4:~/.sbt/1.0/credentials.sbt の追加
【4】Step4: 環境変数「CODEARTIFACT_AUTH_TOKEN」への設定
【5】Step5: 動作確認
【6】トラブルシュート方法

【0】前提条件

* 当たり前だが以下があること
 + Java(今回は、JDK11)
 + SBT(今回は、SBT v1.9.8)

1)ベースとなる知識

* 基本、以下で行っていることとあまり変わらない

SBT ~ リポジトリ先を変更・追加するには ~
https://dk521123.hatenablog.com/entry/2024/01/12/191252

【1】Step1: ~/.sbt/repositories の追加

リポジトリ先をCodeArtifactに変更するために
~/.sbt/repositories を追加する。

1)構文

* AWS CLI get-repository-endpoint については、
 以下の関連記事を参照のこと

AWS CodeArtifact ~ AWS CLI
https://dk521123.hatenablog.com/entry/2024/01/14/005148

~/.sbt/repositories

[repositories]
【任意の文字列】: 【リポジトリ先(AWS CLI get-repository-endpoint で取得)】

2)サンプル

~/.sbt/repositories

[repositories]
demo-maven-test-repo: https://test-domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/test-repo/

コマンド例

aws codeartifact get-repository-endpoint \
  --domain test-domain --repository demo-maven-test-repo \
  --format maven --region us-west-2 \
  --query repositoryEndpoint --output text

【2】Step2: ~/.sbt/.credentials の追加

リポジトリ先の認証情報を格納するために
~/.sbt/.credentials を追加する。

1)構文

* AWS CLI get-authorization-token については、
 以下の関連記事を参照のこと

AWS CodeArtifact ~ AWS CLI
https://dk521123.hatenablog.com/entry/2024/01/14/005148

~/.sbt/.credentials

realm=
host=【ドメイン名】-【アカウントID】.d.codeartifact.【Region】.amazon.com
user=aws
password=【aws codeartifact get-authorization-token で取得したToken】

補足1:realm

* ユーザー、アプリケーションなどのオブジェクトを管理するための領域
* ユーザーは、realm に所属し、ログインすることになる
 => ★Point★ 今回は、何も指定せず。(逆に指定したら、ちゃんと動かなくなる)

cf. realm (レルム)= 領域, 範囲

補足2:user=aws

* ユーザ名「aws」は、以下の公式ドキュメントを参照

https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/maven-mvn.html#fetching-dependencies

<servers>
  <server>
    <id>codeartifact</id>
    <username>aws</username> <- ★ここ
    <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
  </server>
</servers>

補足3:password

* パスワードは、以下の公式ドキュメントから
 環境変数「CODEARTIFACT_AUTH_TOKEN」は、
 AWS CLI「aws codeartifact get-authorization-token」から取得

https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/maven-mvn.html#publishing-third-party-artifacts

# <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>

# 値は、AWS CLI「aws codeartifact get-authorization-token」から取得
export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text --profile profile-name`

2)サンプル

~/.sbt/.credentials

realm=
host=demo_domein-12345657890.d.codeartifact.us-west-2.amazon.com
user=aws
password=f32rfqdajopfaufoijoipjg....

【3】Step3: ~/.sbt/.credentials の指定

* この認証情報ファイルのパスを指定するための設定も追加。
* やり方は、以下の公式ドキュメントに記載されている

https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html#Using+credentials+for+the+proxy+repository

1)やり方1:環境変数「SBT_CREDENTIALS」

export SBT_CREDENTIALS="$HOME/.sbt/.credentials"

2)やり方2:system property「sbt.boot.credentials」

-Dsbt.boot.credentials="$HOME/.sbt/.credentials"

3)やり方3:build.sbt への追加

* build.sbt への追加
 => 以下の公式ドキュメントも参考になる

https://www.scala-sbt.org/1.x/docs/Publishing.html#Credentials

build.sbt

credentials += Credentials(Path.userHome / ".sbt" / ".credentials")

# 【2】【3】含めて書き方もできるらしい
# 
# credentials += Credentials(
#  "Demo for CodeArtifact with SBT",
#  "demo_domein-12345657890.d.codeartifact.us-west-2.amazon.com",
#  "aws",
#  "f32rfqdajopfaufoijoipjg...."
# )

4)やり方4:~/.sbt/1.0/credentials.sbt の追加

~/.sbt/1.0/credentials.sbt

credentials += Credentials(Path.userHome / ".sbt" / ".credentials")

【4】Step4: 環境変数「CODEARTIFACT_AUTH_TOKEN」への設定

* CODEARTIFACT_AUTH_TOKEN 環境変数にアクセスTokenを設定する

https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/tokens-authentication.html#env-var

export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`

【5】Step5: 動作確認

* sbt コマンドを打って確認
* 環境がなかったら、以下の関連記事の「4)sbt 実行」を参照のこと

https://dk521123.hatenablog.com/entry/2024/01/12/191252
コマンド例

sbt run

【6】トラブルシュート方法

エラーが発生した場合、CloudTrailのイベント履歴から参照するといい。

例:エラー「Unauthorized: htt.../xxx.pom (xxxxx)」

CloudTrailのイベント履歴の「ReadFromRepository」APIの実行状況から
確認することができる

関連記事

AWS CodeArtifact ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/12/26/012343
AWS CodeArtifact ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/01/11/233802
AWS CodeArtifact ~ AWS CLI
https://dk521123.hatenablog.com/entry/2024/01/14/005148
AWS CodeArtifact ~ 独自JARをリポジトリにあげる ~
https://dk521123.hatenablog.com/entry/2024/01/25/161926
SBT ~ 基本編 / build.sbt ~
https://dk521123.hatenablog.com/entry/2023/01/27/000000
SBT ~ 基本編 / sbtコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/26/000000
SBT ~ リポジトリ先を変更・追加するには ~
https://dk521123.hatenablog.com/entry/2024/01/12/191252