Typetalk使いに向けてざっくりとのこしておく
前提
- ElasticBeanstalkアプリケーションがデプロイ済み
- Serverless Frameworkもインストール済み
- Golang及びDepもインストール済み
1. ElasticBeanstalkのCloudWatch ログストリーミングを有効にした
マネジメントコンソールから対象のEnvironmentを開き、 設定 > ソフトウェア設定 を開く
ログのストリーミングを有効にして適用する
CloudWatchにログストリームが作成され、Environmentで出力されたログが送信されてくる
2. CloudWatchログをTypetalkにPOSTする関数をつくって登録した
せっかくなのでちょっと前にサポートされた go と serverless frameworkで
ありがたいテンプレートを使った 感謝
sls create -u https://github.com/serverless/serverless-golang/-p goserverless
そしてありがたいライブラリを使う
aws-lambda-go-eventはめんどくさいStructの定義をしてくれてる感謝
go-typetalkも面倒なPOST部分を簡単にかける感謝
import(
"github.com/aws/aws-lambda-go/lambda"
"github.com/nulab/go-typetalk/typetalk"
"github.com/eawsy/aws-lambda-go-event/service/lambda/runtime/event/cloudwatchlogsevt"
)
適当にメッセージを組み立ててPOSTする部分を実装 かんたん
messages := make([]string, len(event.Records))
for i, record := range event.Records {
messages[i] = record.LogEvent.Message
}
// TypetalkのPOSTサイズ上限があるので長い分は抜く
r := []rune(strings.Join(messages, "\n"))
message := fmt.Sprintf("```\n%s\n```", string(r[0:3900]))
// 追いかけやすいように便利なまとめ機能にもいれる
options := typetalk.PostMessageOptions{}
options.TalkIds = []int{talkId}
client := typetalk.NewClient(nil).SetTypetalkToken(token)
client.Messages.PostMessage(ctx, topicId, message, &options)
ビルドしてAWSにデプロイ
sls deploy
3. CloudWatchログをLambda関数へストリーミングさせた
ここからLambdaサービスへのストリーミング開始を選んで設定
Lambda 関数 : さっきデプロイした関数
ログ形式 : とりあえずその他
4. TypetalkにログがPOSTされた
ストリーミングが開始されると、Lambda関数が実行され、Typetalkにアプリケーションのログが流れた
実際に動かしているものはもう少し小細工してあるけど、そこらへんを簡潔にしてコードを置いたのでTypetalk使い達の参考になれば。
https://github.com/katsut/typetalk-awslogs
流すだけならわりとかんたんにできた