Lambda+Apex+Go로 slack에게 메시지 보내기

9935 단어 5Apex람다

개요


  • 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": "*"
            }
        ]
    }
    

    ② 자신의 IAM 유저에게 "lambda_apex_go" 그룹 부착


  • 연결하십시오

  • ③ 여기에서 로컬 작업. 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
    

    main.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
        })
    }
    

    run.go (채널 이름을 편집하십시오)


    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()
    }
    

    ⑤deploy한다


    $ 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
    
  • 이런 식으로 게시 될까 생각합니다



  • ⑦ 삭제할 때는?


    ### apexから削除
    $ apex delete
    yes
    # ウェブコンソールから削除しても良いです
    
    ### コンソール上でIAMから下記を削除
    使ったPolicy
    使ったrole
    

    좋은 웹페이지 즐겨찾기