GitHubにプッシュしたときに、Backlogにコメントを書き込む仕組みの作り方(AWS Lambda使用)【前編】

So erstellen Sie einen Mechanismus zum Schreiben von Kommentaren in Backlog beim Pushen an GitHub (mit AWS Lambda) [Teil 1]

Das Git-Repository von Backlog verfügt über eine Funktion, die automatisch kommentiert, dass es an den Issue gepusht wurde, wenn Sie den Issue-Schlüssel in die Commit-Nachricht schreiben und ihn pushen.

■ Überraschend praktisch? Schlüssellink ausgeben
https://backlog.com/en/blog/issue-key-link/#commit

Diese Funktion ist sehr praktisch, aber aufgrund der Spezifikationen des Projekts kommt es häufig vor, dass das Git- Repository von Backlog nicht verwendet werden kann.

Daher möchte ich dieses Mal eine ähnliche Funktion mithilfe der Webhook-Funktion des GitHub-Repositorys und AWS Lambda implementieren.

<Inhalt>

(0) Dinge, die vorbereitet werden müssen

(1) Konfigurieren Sie AWS Lambda und Amazon API Gateway

(2) GitHub-Webhook-Einstellungen

(3) GitHub-Authentifizierung mit AWS Lambda

(4) Hochladen des Axios-Pakets (Teil 2)

(5) Call Backlog API (Teil 2)

(6) AWS-Nutzungsgebühr (Teil 2)

(0) Dinge, die vorbereitet werden müssen

・AWS-Konto ・Backlog- Konto ・GitHub-Konto

(1) Konfigurieren Sie AWS Lambda und Amazon API Gateway

■ Erstellen Sie eine einfache Webanwendung – Modul 2: Erstellen Sie eine serverlose Funktion
https://aws.amazon.com/jp/getting-started/hands-on/build-web-app-s3-lambda-api-gateway-dynamodb/module-two/?e=gs2020&p=build-a-web -App-Einführung

Befolgen Sie grundsätzlich die obige Anleitung.
Öffnen Sie die AWS Lambda-Konsole und klicken Sie auf „Funktion erstellen“.

Funktionsname: commentBacklogWithGithubCommit
Laufzeit: Node.js 14.x
Wird besorgt.

Jetzt habe ich eine Funktion, die eine Antwort auf eine Anfrage wie diese zurückgibt:

 { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }

Zu diesem Zeitpunkt gibt es jedoch keine URL zum Senden einer Anfrage an diese Funktion.

Als nächstes erstellen Sie die URL.

Öffnen Sie im AWS Lambda-Dashboard die Details des zuvor erstellten „ commentBacklogWithGithubCommit “.

Klicken Sie auf „Trigger hinzufügen“ und fügen Sie API Gateway mit den folgenden Einstellungen hinzu.

Stellen Sie sicher, dass Sie Cross-Origin Resource Sharing (CORS) aktivieren.
Nun wurde eine URL (Endpunkt) zum Aufrufen der AWS Lambda-Funktion erstellt.

Wenn Sie den „API-Endpunkt“ des Triggers öffnen, sehen Sie „Hallo von Lambda!“.

Als nächstes ist derzeit die ANY-Methode im Endpunkt festgelegt, der GitHub-Webhook ruft sie jedoch mit der POST-Methode auf, sodass wir sie ändern werden.

Öffnen Sie in der Amazon API Gateway-Konsole die Detailseite von „commentBacklogWithGithubCommit-API“, klicken Sie im linken Menü auf „Route“, in der Mitte auf „ANY“, dann auf „Bearbeiten“ und setzen Sie ANY auf dem geöffneten Einstellungsbildschirm auf POST . ändern.

Nun gibt der Zugriff mit get einen internen Serverfehler zurück und der Zugriff mit POST gibt „Hello from Lambda!“ zurück.
Darüber hinaus habe ich Postman für den POST- Übertragungstest verwendet, aber ich werde die Erklärung von Postman weglassen.

(2) GitHub-Webhook-Einstellungen

Richten Sie Webhooks auf GitHub ein.
Wählen Sie auf der GitHub-Repository-Seite „Einstellungen“ „Webhooks“ und klicken Sie auf „Webhook hinzufügen“.

Die Payload-URL ist der API-Endpunkt von API Gateway.
Wählen Sie als Inhaltstyp „application/json“ aus.
Geben Sie eine zufällige Zeichenfolge für Secret ein.

Klicken Sie anschließend mit den Standardeinstellungen auf „Webhook hinzufügen“, um die Einstellungen abzuschließen.

Nach der Konfiguration wird beim Pushen von Änderungen an diesem Repository automatisch eine Anfrage an den API-Endpunkt gestellt.
Sie können den Verlauf der gesendeten Anfragen auf der Registerkarte „Letzte Lieferungen“ auf der Detailseite des entsprechenden Webhooks überprüfen und Anfragen wiederholt senden, indem Sie auf die Schaltfläche „Erneut senden“ klicken. Danach werden wir mit diesem Redeliver testen.

(3) GitHub-Authentifizierung mit AWS Lambda

Wenn auf der AWS Lambda-Seite eine Anfrage eingeht, fügen Sie als Nächstes einen Mechanismus hinzu, um zu authentifizieren, ob es sich bei der Anfrage tatsächlich um eine Webhook-Anfrage von GitHub handelt.

Auf der Detailseite für die Funktion „commentBacklogWithGithubCommit“
Registrieren Sie es unter „Umgebungsvariablen“ auf der Registerkarte „Einstellungen“ unter dem Namen „GITHUB_SECRET“.

Als nächstes implementieren Sie die Funktionalität zur Authentifizierung im Code.

 exports.handler = async (event) => { // ヘッダ取得 const headers = event.headers; // ボディ取得 const body = event.body; // バリデーション実行、およびエラー時の処理 if (! isValid(body, headers)) { 
// Fehler zurückgeben
 const Antwort = {
 Statuscode: 500,
 body: 'Die angegebene Signatur ist ungültig',
 };
 Rückantwort;
 }

 // eine normale Antwort zurückgeben
 const Antwort = {
 Statuscode: 200,
 body: JSON.stringify('Hallo von Lambda!'),
 };
 Rückantwort;

 Funktion isValid(body, headers) {
 const crypto = require('crypto');
 const hmac = crypto.createHmac('sha1', process.env.GITHUB_SECRET);
 hmac.update(body, 'utf8');
 const Signatur = 'sha1=' + hmac.digest('hex');
 Rückgabesignatur === headers['x-hub-signatur'];
 }
 };

Jetzt akzeptieren wir nur Anfragen von GitHub-Webhooks.

Das wird lang, also ist die erste Hälfte vorbei.
Fortsetzung in der zweiten Hälfte.

■ So erstellen Sie einen Mechanismus zum Schreiben von Kommentaren in Backlog beim Pushen an GitHub (mit AWS Lambda) [Teil 2]
https://fourmix-blog.myshopify.com/blogs/aws/220118_2

Autorenname: Molly

Front-End-Ingenieur, der React liebt.

1 von 3