Closed4

slackからgithub actionsワークフローを動かす

not75743not75743

手始めにcurlで動かす

ワークフロー作成

こちらをパクらせていただく

エンドポイントの詳細はこれかな
https://docs.github.com/ja/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event

curlでリクエストを投げる ~権限が足りない編~

$ curl -L \
   -X POST \
   -H "Accept: application/vnd.github+json" \
   -H "Authorization: Bearer $GITHUB_TOKEN"\
   -H "X-GitHub-Api-Version: 2022-11-28" \
   https://api.github.com/repos/$OWNER/$REPO/dispatches \
   -d '{"event_type":"echo_message","client_payload":{"message":"Hello!"}}'
{
  "message": "Bad credentials",
  "documentation_url": "https://docs.github.com/rest",
  "status": "401"
}

PATがおかしそうなので再作成

PATを作る

必要な権限はこれ

"Contents" repository permissions (write)

curlでリクエストを投げる ~成功編~

$ curl -L \
>   -X POST \
>   -H "Accept: application/vnd.github+json" \
>   -H "Authorization: Bearer $GITHUB_TOKEN" \
>   -H "X-GitHub-Api-Version: 2022-11-28" \
>   https://api.github.com/repos/$OWNER/$REPO/dispatches \
>    -d '{"event_type":"echo_message","client_payload":{"message":"Hello!"}}'

成功
204が返ってきたらOKっぽい

ワークフローの様子

おお、成功している

not75743not75743

Lambdaからリクエストを投げる

コードを作る

今度はLambdaでも投げる。言語はpython3.12
トークンはsecretsmanagerなりにあとで置き換える

lambdaコード
import json
import os
import requests

def lambda_handler(event, context):
    # 環境変数からパラメータを取得
    github_token = os.environ['GITHUB_TOKEN']
    owner = os.environ['OWNER']
    repo = os.environ['REPO']

    # GitHub APIエンドポイント
    url = f'https://api.github.com/repos/{owner}/{repo}/dispatches'

    # リクエストヘッダー
    headers = {
        'Accept': 'application/vnd.github+json',
        'Authorization': f'Bearer {github_token}',
        'X-GitHub-Api-Version': '2022-11-28'
    }

    # リクエストボディ
    payload = {
        'event_type': 'echo_message',
        'client_payload': {
            'message': 'Hello from Lambda!'
        }
    }

    try:
        # POSTリクエストの送信
        response = requests.post(url, headers=headers, data=json.dumps(payload))

        # レスポンスの処理
        if response.status_code == 204:
            print('Success')
            return {
                'statusCode': 200,
                'body': json.dumps('Success')
            }
        else:
            print(f'Failed with status code: {response.status_code}, response: {response.json()}')
            return {
                'statusCode': response.status_code,
                'body': json.dumps(response.json())
            }
    except Exception as e:
        print(f'Error occurred: {e}')
        return {
            'statusCode': 500,
            'body': json.dumps('Internal Server Error')
        }

確認

よさげ

not75743not75743

slackワークフロー化(だめだった)

普通にやる

slackで

@aws lambda invoke --function-name <lambda関数の名前> --region <リージョン>

すればOKです。

毎回手打ちするのは手間なのでslackワークフロー化したい

作れんかった...

無料プランだとワークフロービルダーが使えない...

zapierと連携すればいけるかな?
https://zapier.com/apps/aws-lambda/integrations/slack/8007/invoke-aws-lambda-functions-for-new-messages-on-slack

今度試したい

このスクラップは3ヶ月前にクローズされました