続いて、GitHubとSNSの連携を行います。
GitHubで通知を行うリポジトリの設定画面を開き「Integrations & services」を選択します。今回は「sample」というリポジトリを用意しました。
「Add service」から「Amazon SNS」を選択します。
先ほど作成したSNS Topicの「Arn」、および、IAMユーザーのセキュリティ認証情報を入力します。
これでGitHubとSNSの連携は完了です。
GitHub API Hooksを見れば分かりますが、GitHubからSNSへ通知可能なデフォルトイベントは「Push」のみとなっていて、必要に応じてGitHub APIをコールしイベントを追加する必要があります。今回は「Issue Comment」を追加してみます。
{
"name": "amazonsns",
"events": [
"push"
],
"supported_events": [
"commit_comment",
"create",
"delete",
"deployment",
"deployment_status",
"download",
"follow",
"fork",
"fork_apply",
"gist",
"gollum",
"issue_comment",
"issues",
"member",
"public",
"pull_request",
"pull_request_review_comment",
"push",
"release",
"status",
"team_add",
"watch"
],
"title": "AmazonSNS",
"schema": [
[
"string",
"aws_key"
],
[
"string",
"sns_topic"
],
[
"string",
"sns_region"
],
[
"password",
"aws_secret"
]
]
}
まずはWebHook APIをコールするためのトークンを取得します。「Personal Access Tokens」にアクセスし「Generate new token」を選択します。
トークンを識別する文言とトークンのスコープを選択します。今回は私個人のリポジトリが対象であるためスコープは「admin:repo_hook」としましたが、必要に応じて適切な権限を選択してください。
トークンが表示されるので控えておきます。
続いて、通知を行うGitHubリポジトリのHook IDを確認します。
ターミナルなどから下記のコマンドを実行します。「YOUR_TOKEN」には1つ前の手順で確認したトークンを入力し、「OWNER」と「REPOSITORY_NAME」は適宜GitHubの情報で置き換えてください。
curl -X GET -s -H "Authorization: token YOUR_TOKEN" \ https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks
実行結果の「id」がHook IDです。
[
{
"type": "Repository",
"id": ********,
"name": "amazonsns",
"active": true,
"events": [
"push"
],
"config": {
"aws_key": "********",
"aws_secret": "********",
"sns_region": "ap-northeast-1",
"sns_topic": "arn:aws:sns:ap-northeast-1:************:github"
},
"updated_at": "2017-08-19T06:53:53Z",
"created_at": "2017-08-19T06:53:53Z",
"url": "https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks/HOOK_ID",
"test_url": "https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks/HOOK_ID/test",
"ping_url": "https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks/HOOK_ID/pings",
"last_response": {
"code": 0,
"status": "unused",
"message": "Unused"
}
}
]
最後に、Integrations Eventの設定を行います。HOOK_IDは取得したものに置き換えてください。
curl -X PATCH -s -H "Authorization: token YOUR_TOKEN" \
https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks/HOOK_ID \
-d '{"active": true, "events": ["push", "issue_comment"]}'
実行結果の「events」に「issue_comment」が追加されていたら完了です。
{
"type": "Repository",
"id": ********,
"name": "amazonsns",
"active": true,
"events": [
"issue_comment",
"push"
],
"config": {
"aws_key": "AKIAIXD6KKDO5LYIT2GA",
"aws_secret": "********",
"sns_region": "ap-northeast-1",
"sns_topic": "arn:aws:sns:ap-northeast-1:************:github"
},
"updated_at": "2017-08-19T08:28:06Z",
"created_at": "2017-08-19T06:53:53Z",
"url": "https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks/HOOK_ID",
"test_url": "https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks/HOOK_ID/test",
"ping_url": "https://api.github.com/repos/OWNER/REPOSITORY_NAME/hooks/HOOK_ID/pings",
"last_response": {
"code": 0,
"status": "unused",
"message": "Unused"
}
}
AWS Lambdaの実現するイベントドリブンなプログラミングが、IoTへの扉を開く
米マイクロソフト、AWS Lambda的なサービス「Azure Functions」を発表
米IBMがAWS Lambda的なサービスOpenWhiskを発表、オープンソース提供もCopyright © ITmedia, Inc. All Rights Reserved.