はじめに

どうも!バックエンドのしゅがーです。

Klayersを参考にAWS Lambda Layersのビルドシステムを内製化した話で内製化できるようになりました。

自前のGitリポジトリも同様にAWS Lambda Layersに登録したいとなり、バックエンドチームで1つ目の登録ができました。

自分も続けと登録した際のお話です。

問題

自分も登録しようとやってみたところエラーとなってしまいました。

原因を確認したところ、以下のページに 「1つのサーバー上で複数のリポジトリを使うなら、それぞれのリポジトリに対して専用のキーペアを生成しなければなりません。 複数のリポジトリでデプロイキーを再利用することはできません。」 とあるように1つ目のリポジトリはデプロイキーを発行しSSH認証する方法で登録していたのですが、これを使いまわすことはNGだということがわかりました。 1つのサーバー上で複数のリポジトリを利用する

なので同じ方法で登録する場合は、私が登録しようと考えたリポジトリも新しくデプロイキーを発行する必要があったのです。

毎回発行するのは今後登録したいリポジトリは増えていくため避けたいと、GitHub Appを利用した複数のリポジトリを登録する方法を検討しました。

方針

SSH認証によるリポジトリごとのAWS Lambda Layers登録からGitHub Appを利用した認証による複数リポジトリのAWS Lambda Layers登録への変更をしました。

大きな違いは、これまではSSH認証でしたがGitHub AppではGitHub App インストール アクセス トークンを利用したHTTPS認証となります。

他はこれまでと一緒でGitHubActionsのワークフローを使ってAWS Lambda Layersに登録していきます。

GitHub Appとは?

  • GitHub Apps は、GitHub の機能を拡張するツール
  • GitHub で、issue を開く、pull request にコメントする、プロジェクトを管理する、といったもののほか、Slackなどの外部ツールへの連携などの操作ができる

GitHub Appの利用

GitHub App を使うには、ユーザーまたは Organization のアカウントにアプリをインストールする必要です。自身の所属する組織がGitHubを使用しているなら、その組織にインストールするのがベターです

GitHub Appの作成

Settings > Developer settings > GitHub Appsを選択します。

遷移したページの右上にNew GitHub Appとあるのでこちらを押下します。

Appの名前の他、やりたい内容に合わせてWebhookの入力やPermissionsにチェックをいれて登録します。

今回私たちの要件に必要なPermissionsは以下でした。

Repository permissions

  • Actions: Read and write
  • Contents: Read and write
  • MetaData: Read-only
  • Workflows: Read and write

作成したAppは、利用するプロジェクトやアカウントにインストールしてください。

GitHubActionsでの利用

GitHub Appインストールアクセストークンを使ってGitHub Actionsを実行するを参考にGitHubActionsのワークフローを以下のように記述するとGitHub Appを利用出来、複数リポジトリをAWS Lambda Layersに登録することができました。

jobs:
build-deploy:
runs-on: ubuntu-latest
env:
OWNER: ${{ github.repository_owner }}
steps:
- name: Generate GitHub App Token
id: app_token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: ${{ env.OWNER }}

参考リンク