CodeArtifactからnpm install してみた

# はじめに
npm installしてみた
以上！ではなく

CodeArtifactがすでにあるのに、開発環境構築すぐにはできない感じになっていた
つまり、CodeArtifactがデプロイにだけ使われていて、勿体ないと思ったので
CodeArtifactから独自ライブラリを引っ張ってきてnpm install する方法を整理してみた。

# さっそくやってみた
## 前提条件
- CodeArtifactはすでにある  
  いつか構築も整理したい
- CodeArtifactに独自のライブラリを登録してある
- package.jsonには、その独自ライブラリをバージョン指定で記載済み  
 （ローカルのfile://指定とかじゃない)

の状態を認識しつつ、誰でも出来る(AWSへの理解がない人でも可能で、手順も減らす)
を目指して整理してみた。


## 方針
- git(CodeCommit)からクローンしてポチッでインストール完了
- npm バージョンアップとかも別途できるようには、したい
- CLIのバージョンとかはあんまり気にしたくない


3つを守るために、スクリプトを軽く作って、分けてを実施することにした

## 整理してやってみた
### 必要なこと
- AWS CLIへのログイン(SSO管理の場合のみ必要)
- CodeArtifact用にnpm変更
- npmでのインストール 
- npmを元に戻す
をやる必要がある

CLIへのログインだけはちょっと別枠とすることにして
その他三つを実施することにした
方針を守るには、この3つを一つのスクリプトに書くと少し面倒なので、分けることにする


### Gitからクローンしてポチッっとスクリプト
**intall.ps**を作成。
```ps
npm install 
```

出来た。と思ったら、以前npm書き変えたままだった

真面目に考えると、大枠として、下記状態にできればポチっとスクリプトができる。
```ps
# npm情報の書き変え用スクリプトの実行
& ./Set-Codeartifact-Config.ps

npm install 

# npm情報の書き変え用スクリプトの実行
& ./Delete-Codeartifact-Config.ps
```


### CodeArtifact用にnpm変更スクリプト
**Set-Codeartifact-Config.ps**
と名付けてたスクリプト
トークンとURLを取得して接続先にセットするだけ



```ps

# Authorizationトークンを取得しつつ
function Get-AuthorizationToken {
    $authToken = & aws codeartifact get-authorization-token --domain {hoge} --domain-owner {hoge-owner} --query authorizationToken  --profile {hoge} --output text
    # シンプルに空ならエラー
    if ([string]::IsNullOrEmpty($authToken)) {
    Write-Host "ERROR"
     return ""
    } else
    {
     return $authToken.Trim()}
}

# レポジトリのエンドポイントを取得トークンを取得しつつ
function Get-RepositoryEndpoint {
    $repoEndpoint = & aws codeartifact get-repository-endpoint --profile {hoge} --domain {hoge} --domain-owner {hoge-owner} --repository {hoge-lib} --format npm --output text
    # シンプルに空ならエラー
    if ([string]::IsNullOrEmpty($repoEndpoint)) {
    Write-Error "ERROR"
     return ""
    } else
    {
     return $repoEndpoint.Trim()
    }
}


$CODEARTIFACT_AUTH_TOKEN = Get-AuthorizationToken

if ([string]::IsNullOrEmpty($CODEARTIFACT_AUTH_TOKEN)) {
    Write-Error "Error: Return value is empty"
    exit 1
}
$ARTIFACT_URL = Get-RepositoryEndpoint

if ([string]::IsNullOrEmpty($ARTIFACT_URL)) {
    Write-Error "Error: Return value is empty"
    exit 1
}
# npmの設定を更新する
npm config set registry=$ARTIFACT_URL
# URLから出せると思うが、サボった
npm config set //{domain}-{hoge-owner}.d.codeartifact.{region}.amazonaws.com/npm/{hoge-lib}/:_authToken=$CODEARTIFACT_AUTH_TOKEN
```

なぜ、
```
aws codeartifact login 
```
を使わないか。

バージョンによってできる出来ないがあると今後も面倒なことが起きそうだと思ったから
(開発なんだから、バージョン揃えてるだろ！はごもっとも)

これにてこのスクリプトが完成


### CodeArtifact用にnpm設定削除スクリプト
**Delete-Codeartifact-Config.ps**
と名付けてたスクリプト
本当に削除するだけ

```ps

# CodeArtifact接続用のnpmを元に戻すだけのスクリプト
npm config delete registry
npm config delete //{domain}-{hoge-owner}.d.codeartifact.{region}.amazonaws.com/npm/{hoge-lib}/:_authToken
```

こっちもスクリプトが完成

# 完成

intall.psをPowershellから動かしてみたらなんとか動いた

これで
1. Gitからクローンした人  
intall.psを使うだけ
1. ライブラリいろいろ変えたい人  
Set-Codeartifact-Config.psとDelete-Codeartifact-Config.psを使っていい感じにする

が完成した。

Delete-Codeartifact-Config.psはまぁその開発だけのうちは、何も動かさなくてもいい気がするけど一応


以上、AWSのサイト見つつ、Poweshellの書き方をChatGptに教えてもらいつつ作ってみた  
エラーでWrite-Errorにしてみたけど
ただ動かすだけならWrite-Hostで何が起きたか日本語で書いてあげた方分かりやすい気がする

https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/npm-auth.html