【AWS】lanbda実行エラー 備忘録 【lambda】

lambdaがいつの間にか発火しなくなっていた時のエラー対処方の備忘録。

エラーログ

Syntax error in module 'lambda_function': Non-ASCII character '\xe6' in file /var/task/lambda_function.py on line 75, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details (lambda_function.py, line 75)

f:id:ykoomaru:20160914231219p:plain

解決法

エラーログにも書いてあるのですが、ASCII以外の文字列が入っているため、エラーでこけていたよう。

lambdaの先頭に以下の行を追加し、文字コードutf-8に変更したら無事発火するようになりました。

# coding:utf-8

余談

なぜいきなりlambdaが発火しなくなったのか謎。 cloudwatchlogsを追って見ても、あるタイミングから発火しなくなっている模様。 コードにマルチバイト文字なんて使ってないんだけどな...

作業のタイミングで触ってしまったのかもしれない。 こんな時のために、検証アカウントでも、AWS Config入れといたほうが堅実なのかもしれない。

qiita.com

【AWS】 カスタムメトリクスを使ったプロセス監視(Windows編) 【Cloudwatch】

こんにちは。

以前カスタムメトリクスを使ってLinuxのプロセス監視を行うブログを書いたのですが、今回Windowsで同様のことをやってみたいと思います。 

  Linux編はこちら。 qiita.com

環境

  • WindowsServer2012R2 (ami-281ad849)
  • AWS CLI (ver 1.10.63)

目次

  1. IAMロール作成
  2. batファイル作成
  3. テスト

作業

1. IAMロール作成(AWSコンソール作業)

まず、インスタンスにアタッチするIAMロールを作成します。 ポリシーは PutMetoricDataのみ許可します。

IAMポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

上記ポリシーを持ったIAMロールを作成し、WIndowsServer起動時に、アタッチします。

2. batファイル作成(WindowsServer作業)

WIndowsServerを起動したら、プロセスの状態をCloudWatchにPutするバッチを作成します。 今回AWSCLIのインストール手順は割愛します。必要であればクラメソさんの記事を参照ください。

Windows Server への AWS CLIのインストール | Developers.IO

監視するプロセスは、特になんでもいいのですが、W32Time にしてみました。 スクリプト内容を記載していますので、コピー&ペーストでbatファイルを作成してください。

スクリプト概要

  • for分でメタデータより、incetanceidを変数(incetanceid)に格納
  • sc query コマンドで、プロセスの状態がRUNNINGかどうか確認
  • sc query コマンドの返り値を確認
  • 返り値が1(プロセスが起動中)ならば、変数(Processes)に1を格納
  • 返り値が0(プロセス起動中以外)ならば、変数(Processes)に0を格納
  • 格納した変数をもとに、CloudWatchにデータをPUT

スクリプト

@echo off

for /f "usebackq tokens=*" %%a in (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id`) do @set incetanceid=%%a

sc query W32Time | findstr STATE | findstr RUNNING > null
if %errorlevel% == 0 (
set Processes=1
) else (
set Processes=0
)

aws cloudwatch put-metric-data --metric-name "W32Time" --namespace "System/Windows" --region ap-northeast-1 --value %Processes%  --unit "Count" --dimensions "InstanceId=%incetanceid%"

3. テスト

最後にスクリプトのテストをします。

  • W32Timeプロセスが起動している場合(1を返す)

f:id:ykoomaru:20160911124317p:plain

  • W32Timeプロセスが停止している場合(0を返す)

f:id:ykoomaru:20160911125647p:plain

あとは、タスクマネージャーにスクリプトを仕込んで定期実行すれば、プロセスの監視ができますね。

プロセスが停止している場合にアラートを上げる設定は、カスタムメトリクスの値をトリガーにCloudWatchの設定をしてください。

以上となります。 ご指摘事項がありましたら、ご連絡お願いします。

参考

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html

【AWS】カスタムメトリクスを使ったプロセス監視(Linux編)【CloudWatch】 - Qiita

put-metric-data — AWS CLI 1.10.66 Command Reference

botkit を使ってslackbotを作ってみた

こんにちは。

ブログ書くのが久しぶりになってしまいました。(書かねば..

唐突ですが、最近社内向けコミュニケーションツール slack が流行っていますよね。
slackは、APIを公開いていて、外部ツールとの連携ができるので、かなり自由度があるサービスです。
botの作成をすることもできるのですが、一から作るにはコードあんまり書かない私には若干ハードル高めです...

そこで、Botkit というBotを作るためのフレームワークがSlack App Directoryで公開されていたので、それを使ってslackbotを簡単に作ってみました。

環境

OS X EI Capitan(10.11.3)
・npm v0.12.4
・node v0.12.4
# botkitはNode.jsを利用するので必要となります。

目次

  1. slackでの下準備
  2. botkitのダウンロード、インストール
  3. botの起動
  4. botを少しいじる
  5. 感想

作業

1. slackでの下準備

まず、slack上でslackbot作成に必要な作業を行います。

  1. Slackのチーム画面を開き、[Configure Apps] をクリックします。 f:id:ykoomaru:20160827114249p:plain

  2. 検索窓に [Bots] を検索し、 [Bots] を開きます 。 f:id:ykoomaru:20160827114252p:plain

  3. ロボットの画像の下にある [Add COnfiguration] をクリックします。
    #botを追加すると、[Configurerations] の下に追加されていきます。 f:id:ykoomaru:20160827114254p:plain

  4. bot名入力し、[Add bot integration] をクリックします。
    #名前は愛着がわく名前がいいですね(`・ω・´) f:id:ykoomaru:20160827114258p:plain

  5. botkitを起動するのに利用するので、[API Token] の値をメモします。 f:id:ykoomaru:20160827114301p:plain

  6. bot を作成するとDMにbotが追加されています。(名前はmaruにしました)
    #botを動かし始めればオンライン状態になります
    f:id:ykoomaru:20160827114303p:plain

以上で、slackでの下準備作業は完了です。

2. botkitのダウンロード、インストール

それでは、botkitの本体の作成をします。

  1. botkitを格納したフォルダに移動し、githubからサンプルコードを落とします

    > cd <botkitを格納するフォルダ>
    > git clone https://github.com/howdyai/botkit.git

  2. botkitをいうフォルダができているので、ディレクトリを移します。ファイルの中身はこんな感じです。

    > cd botkit
    > ls
    CONTRIBUTING.md facebook_bot.js readme-twilioipm.md
    Dockerfile lib readme.md
    LICENSE.md package.json slack_bot.js
    changelog.md readme-facebook.md tests
    examples readme-slack.md twilio_ipm_bot.js

  3. nmpでパッケージのインストールをすれば、完了です。 # ネット環境によっては時間がかかるかもしれません

> nmp install

githubは↓です。
GitHub - howdyai/botkit: Botkit is a toolkit for making bot applications

3. botの起動

いよいよbotを起動します! botkit内の slack_bot.js が実行ファイルです。

  1. 1.5でメモした[API Token] の値を指定し、botを起動します。

    token=<API_TOKEN> node slack_bot.js

  2. 起動すると、slack上のオンラインになります。
    f:id:ykoomaru:20160827120651p:plain

  3. あとは、チャンネルに召喚し、デフォルトで用意されている英会話を楽しみましょう f:id:ykoomaru:20160827121214p:plain

  4. slack_bot.js を確認してみると、以下のようなコマンドがデフォルトで入っています f:id:ykoomaru:20160827121502p:plain

これで、botの作成は完了です!
botの作成をするだけならかなり簡単にできます。

4. botを少しいじる

ただ、デフォルトだとあまりにもロボットすぎて愛着が湧かない!! なので、少し設定をいじりました。

f:id:ykoomaru:20160827122112p:plain

slack_bot.jsのデフォルトコマンドを日本語に変えて、botのアイコンを変えただけでこんなにも愛着がわくかわいい子になりました!

感想

slackbotの導入までやってみましたが、次は、AWSAPI使って連携とかをやりたいと思います。
他のサービスと連携できるようにしてからが、本番ですね。
猫ぐうかわ。

参考サイト

参考にさせていただきました。ありがとうございます。

BotkitでSlackのBotを作る方法
Slackの新しいフレームワークBotkitを試してみる - Qiita
Botkit を使って Slack bot を作成してみた - まちいろエンジニアブログ