🍉
Github DeployKey を利用して AmplifyHosting のデプロイ時にプライベートリポジトリをインストールする方法
はじめに
やっとこデプロイまでこぎつけたのに、AmplifyHosting のビルドに苦戦。次に活かせたらと思いエラーと解決策を残しておくことにしました。
状況
Next.js(SSR)のアプリをAmplifyでホスティングする際にパッケージにGitのプライベートリポジトリが含まれているとyarn installするときにエラーが出てインストールに失敗してしまう。
package.json
{
"name": "sample-app",
"dependencies": {
"sample-ui": "git+ssh://git@github.com:sample-inc/sample-ui.git#01f438b14879376fca3949fad67a2641c4f1dbcc"
}
}
発生事象
エラーその1
なにも考えずに初期のデフォルトの設定でビルド。キーも何も設定していないのに突然プライベートリポジトリをインストールしているからそりゃ権限ないって怒られる。
amplifyビルドyamlファイル
varsion: 1
frontend:
phases:
preBuild:
commands:
- yarn install
~~ 以下省略 ~~
エラー
yarn install v1.22.0
info No lockfile found.
[1/4] Resolving packages...
error Command failed.
Exit code: 128
Command: git
Arguments: ls-remote --tags --heads git@github.com:sample-inc/sample-ui.git
Directory: /app
Output:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
エラーその2
気をとりなおしてしっかりデプロイキーを設定。するも再びエラー。sshの設定であるStrictHostKeyCheckingによる厳格なホスト鍵のチェックに失敗している模様。
amplifyビルドyamlファイル
varsion: 1
frontend:
phases:
preBuild:
commands:
- eval "$(ssh-agent -s)"
- ssh-add <(echo "$DEPLOY_KEY" | base64 -d)
- yarn install
~~ 以下省略 ~~
yarn install v1.22.0
info No lockfile found.
[1/4] Resolving packages...
error Command failed.
Exit code: 128
Command: git
Arguments: ls-remote --tags --heads git@github.com:sample-inc/sample-ui.git
Directory: /app
Output:
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
エラーその3(たまに発生)
StrictHostKeyChecking行わない設定を追加。満を辞して際デプロイを行うが今度はエラーも出ないでビルドに失敗。
amplifyビルドyamlファイル
varsion: 1
frontend:
phases:
preBuild:
commands:
- eval "$(ssh-agent -s)"
- ssh-add <(echo "$DEPLOY_KEY" | base64 -d)
- mkdir ~/.ssh
- touch ~/.ssh/config
- 'echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- yarn install
~~ 以下省略 ~~
error https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz: Extracting tar content of undefined failed, the file appears to be corrupt: "ENOENT: no such file or directory, chmod '/home/runner/.cache/yarn/v6/npm-p-locate-4.1.0-a3428bb7088b3a60292f66919278b7c297ad4f07-integrity/node_modules/p-locate/index.d.ts'"
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
解決方法
1. デプロイキーとして利用する鍵を作成
ssh-keygen -t ed25519 -f sample_id
2. 公開鍵をプライベートリポジトリのDeploy keysに登録
作成したキーペアのうち公開鍵(sample_id.pub)の方をGithubの設定画面よりデプロイキーに登録する。タイトルはわかりやすい名前ならなんでもOK。
3. Amplifyの環境変数にデプロイキーの秘密鍵を登録
4. Amplifyのビルド設定を書き換えて再ビルド
これで全て解決🎉
amplifyビルドyamlファイル
varsion: 1
frontend:
phases:
preBuild:
commands:
- eval "$(ssh-agent -s)"
- ssh-add <(echo "$DEPLOY_KEY" | base64 -d)
- mkdir ~/.ssh
- touch ~/.ssh/config
- 'echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- yarn install
~~ 以下省略 ~~
5. (おまけ)エラーその3について
Amplify側でもローカルでもときたま突然発生して困っていたエラーでissueを漁っても色々でてくるも実際の原因が掴めず、、、回避方法は参考までに。
amplifyビルドyamlファイル
varsion: 1
frontend:
phases:
preBuild:
commands:
- eval "$(ssh-agent -s)"
- ssh-add <(echo "$DEPLOY_KEY" | base64 -d)
- mkdir ~/.ssh
- touch ~/.ssh/config
- 'echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- yarn cache clean
- yarn install --network-concurrency 1
~~ 以下省略 ~~
参考
そもそもAmplifyのデフォルトビルドイメージは何者???という疑問。opensshやgitはちゃんと入っているのだ↓
opensshのコマンド詳細はこちら↓ githubのデプロイキーの設定について↓ StrictHostKeyCheckingについていちばんしっくりきた↓
Discussion