使用Lambda + Apex + Go向Slack发送消息

总结

    lambda + apex + GoでSlackのIncomming Webhooksを使ってメッセージを飛ばします

请将以下内容用中文进行释义。

使用IAM创建名为“lambda_apex_go”的组

以下是内联政策的内容


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:Create*",
                "iam:Attach*",
                "iam:PassRole",
                "lambda:*"
            ],
            "Resource": "*"
        }
    ]
}

将”lambda_apex_go”组附加到我的IAM用户上。

    アタッチしてください

以下为中文的释义:

“从这里开始进行本地工作。安装Apex并创建工作目录。”

### apexインストール
$ curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sh
$ mkdir apex-sample-go
$ cd apex-sample-go

### ~/.aws/configは。。設定してると思うからスルーするね!

### init
$ go get github.com/apex/go-apex
$ apex init

             _    ____  _______  __
            / \  |  _ \| ____\ \/ /
           / _ \ | |_) |  _|  \  /
          / ___ \|  __/| |___ /  \
         /_/   \_\_|   |_____/_/\_\



  Enter the name of your project. It should be machine-friendly, as this
  is used to prefix your functions in Lambda.

    Project name: apex-sample-golang

  Enter an optional description of your project.

    Project description: apex-samle-golang

  [+] creating IAM apex-sample-golang_lambda_function role
  [+] creating IAM apex-sample-golang_lambda_logs policy
  [+] attaching policy to lambda_function role.
  [+] creating ./project.json
  [+] creating ./functions

  Setup complete, deploy those functions!

    $ apex deploy

### 確認
$ tree
.
├── functions
│   └── hello
│       └── index.js
└── project.json

编写一个通知使用的程序

    • 最終的な構成はこうなります。

 

    最初に出来た、index.jsは削除してください
$ tree
.
├── functions
│   └── hello
│       ├── main.go
│       └── run.go
└── project.json

主要.go

package main

import (
    "encoding/json"

    "github.com/apex/go-apex"
)

type message struct {
    Hello string `json:"hello"`
}

func main() {
    apex.HandleFunc(func(event json.RawMessage, ctx *apex.Context) (interface{}, error) {
        Run()

        return nil, nil
    })
}

跑步去(请编辑频道名称)。

package main

import (
    "encoding/json"
    "net/http"
    "net/url"
)

type Slack struct {
    Text      string `json:"text"`
    Username  string `json:"username"`
    IconEmoji string `json:"icon_emoji"`
    IconURL   string `json:"icon_url"`
    Channel   string `json:"channel"`
}

func LoadSlackParam() *Slack {
    return &Slack{
        Text:      "testだよ!",
        Username:  "test",
        IconEmoji: ":bow:",
        IconURL:   "",
        Channel:   "チャンネル名書いてね",
    }
}

func Run()  {
    URL := "https://hooks.slack.com/services/xxxxxx/xxxxx/xxxxxxxxxxxxxxxxx"
    params, _ := json.Marshal(LoadSlackParam())

    resp, _ := http.PostForm(
        URL,
        url.Values{"payload": {string(params)}},
    )

    defer resp.Body.Close()
}

进行部署

$ apex deploy
# deployが終わった、lambdaでapex-sample-golang_hello関数ができてるはずです

我們試試看執行一下。

### apexで掘ったディレクトリ内であれば
$ apex invoke hello

### aws cli経由であれば
$ aws lambda invoke --function-name apex-sample-golang_hello --invocation-type Event outputfile.txt
    こんな感じで投稿されるかと思います
スクリーンショット 2017-02-01 17.06.56.png

删除时,怎么操作?

### apexから削除
$ apex delete
yes
# ウェブコンソールから削除しても良いです

### コンソール上でIAMから下記を削除
使ったPolicy
使ったrole
广告
将在 10 秒后关闭
bannerAds