
Cloud Scheduler と Cloud Runを使用し、期限切れの GitHubのISSUEをSlackへ飛ばす
構成

全体のソースコードはこちら
まずは開発環境で試してみる
docker-compose.yaml

version: "3"
services:
node:
image: node:13
volumes:
- ./app:/app:cached
working_dir: /app
env_file:
- .env
tty: true
ports:
- 8080:8080
command: ["node", "index.js"]
```- GitHubのAccess Tokenを取得
- SlackAppの Incoming Webhook URL を取得
- 取得したいGitHub IssueのAPI URL
それらをdokcer-compose.yaml と同じ階層の.envにおいておく
GITHUB_API=XXXXGITHUB_TOKEN=XXXXTARGET_SLACK_API=XXXXIssueのTitleに YYYY/MM/DD形式で期限をつける

そして, docker-compose up として、コンテナの中に入り、 yarn install && node index.js とし、
localhost:8080 にアクセスするとslack通知がとぶ
※index.jsは GitHub にありますので、コードの確認は各自お願いします
Cloud Runで動かすためのImageのDockerfileを準備
今回は Dockerfile.prodという名前で準備する
FROM node:13
WORKDIR /app
COPY ./app/package*.json ./
COPY ./app/yarn.lock ./
# Install production dependencies.
RUN yarn install --production
# Copy local code to the container image.
COPY ./app/index.js ./
# Run the web service on container startup.
CMD [ "node", "index.js" ]GCPで環境を構築する
API許可
- Cloud Run
- Cloud Container Registry
- Cloud Build
のAPIを許可しておく
次に、Cloud BuildからCloud RunへDeployするために、サービスアカウントの設定をする

cloudbuild.yaml

steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/todo-notify', '-f', 'Dockerfile.prod', '.']
# Push the image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/todo-notify']
# Deploy image to Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
args: ['beta', 'run', 'deploy', 'todo-notify', '--image', 'gcr.io/$PROJECT_ID/todo-notify', '--region', 'us-central1', '--platform', 'managed']
images:
- gcr.io/$PROJECT_ID/todo-notifyDockerfile.prodのBuildからCloud RunへのDeployまでを行う
todo-notifyという名前でCloud Runを作成する
そして、Cloud Runは非認証からのリクエストは受け付けないようにする
ここまで準備すると、 gcloud builds submit でCloud RunへDeployできる
その後、Cloud Runの環境変数に
GITHUB_API=XXXXGITHUB_TOKEN=XXXXTARGET_SLACK_API=XXXXを設定する

Cloud Schedulerを設定する
Cloud SchedulerからCloud Runを実行するためのService Accountを作成
今回はinvoke-cloud-runという名前で作成

そして、Cloud Runの今回のサービス詳細から、 Cloud Run 起動元 権限を付与

Cloud Scheduler を設定する

Auth header でOIDC tokenを選択し、
先程作成したService Accountを入力する
※今回はテストのため、1hごとに実行されるように設定しました
画面上で RUN NOW 通すと、Cloud Schedulerを実行し試すことができる
便利!
これでよいGitHub Issue TODO ライフを!!
ちなみに、GitHubのProject 機能を使って、カンバンを使うのもおすすめ
Kohei Kondo