2017年2月14日火曜日

Mac Juypter インストール時にエラー [Errno 1] Operation not permitted

  • このエントリーをはてなブックマークに追加


Mac Juypter インストール時にエラー [Errno 1] Operation not permitted Mac にJuypterをインストールしようとすると、以下のようなエラーが発生しました。
sudo pip install jupyter
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 778, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 754, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
    copytree(src, real_dst, symlinks=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
    raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]

解決

python 再度インストール
brew reinstall python
再度実行で成功

2017年2月12日日曜日

AWS Lambda RDSにデータをInsertするとError発生時にアラート通知

  • このエントリーをはてなブックマークに追加


AWS Lambda RDSにデータをInsertするとError発生時にアラート通知 AWS LambdaでRDSにデータをインサートする処理を実現しています。
正しくインサートするときに何もしなく、そのまま終了、
インサートするときにエラーが発生した場合は、Alertメールで通知したい。

Sample Code

var mysql = require('mysql');
exports.handler = function(event,context,callback){
    var No = event.No
    var Birth = event.Birth
    var Email = event.Email
    var Name = event.Name

    if(No == null || Birth == null || Email == null || Name == null){
        context.done('FAILED');
    }

    var connection = mysql.createConnection({
      host     : 'rds endpoint url', //RDSのエンドポイント
      user     : 'root', //MySQLのユーザ名
      password : 'password', //MySQLのパスワード
      database : 'db'
    });

    connection.connect();

    var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        callback(new Error("FAILED"));
      }
    });

    connection.end(function(err) {
        context.done('SUCCESSED');  
    });
}

Lambdaモニタリング設定

「Lambda ⇒ 「関数」 ⇒ 「モニタリング」タブで【呼び出しエラー】というものがあります。
monitoring
これを設定すればエラー発生したら、設定したメールアドレスにメールが飛びます。
エラー(Errors)
が>=1
を1回連続した場合

間隔:5分間
統計:Standard
などの値を設定し、通知の送信先を選択する。
alert
これでうまくいくかと思いきゃ、実は成功のときも、エラーが通知されてしまいます。よくないね。いろいろ調べたところ、このエラーは以下の意味を示しています。
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/lam-metricscollected.html
- 処理された例外 (context.fail(error) など)
- コードの終了を起こす処理されない例外
- メモリ不足例外
- タイムアウト
- 権限エラー

解決

ソースコードの以下の部分が悪かった。
 connection.end(function(err) {
        context.done('SUCCESSED');  
    });
これだと、実行後常にエラーメッセージSuccessedで以上終了してしまいます。
以下のように変更すれば、正常に終了されます。
 connection.end(function(err) {
        context.done();  
    });
結構ハマりました。

2017年2月3日金曜日

AWS Lambda connect ETIMEDOUT

  • このエントリーをはてなブックマークに追加


AWS Lambda connect ETIMEDOUT AWS LambdaでDB接続してデータをインサートするFunctionを書いていて、以下のような ETIMEDOUTエラーが出力されました。エラーがあったが、処理自体は正常に行われてデータがちゃんとDBに挿入されてます。
Error
2017-02-03T05:11:32.012Z    c31fa576-e9cc-11e6-85b4-5dea6b0e5632    { [Error: connect ETIMEDOUT] errorno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'connect', fatal: true }
Code
var mysql = require('mysql');
exports.handler = function(event,context,callback){
    var No = event.No
    var Birth = event.Birth
    var Email = event.Email
    var Name = event.Name

    if(No == null || Birth == null || Email == null || Name == null){
        context.done('FAILED');
    }

    var connection = mysql.createConnection({
      host     : 'rds endpoint url', //RDSのエンドポイント
      user     : 'root', //MySQLのユーザ名
      password : 'password', //MySQLのパスワード
      database : 'db'
    });

    connection.connect();

    var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        callback(new Error("FAILED"));
      }
    });

    connection.end(function(err) {
        context.done('SUCCESSED');
    });
}
いろいろ調べたのですが、LambdaのTimeout値を超えたとか、RDSへのアクセス権ないとか、いろいろありました。
自分の場合は、connection.connect() の一番先頭に持っていたらうまくいった。よくわからんけど。
以下の様な感じです。
var mysql = require('mysql');
exports.handler = function(event,context,callback){
    var connection = mysql.createConnection({
      host     : 'rds endpoint url', //RDSのエンドポイント
      user     : 'root', //MySQLのユーザ名
      password : 'password', //MySQLのパスワード
      database : 'db'
    });

    connection.connect();

    var No = event.No
    var Birth = event.Birth
    var Email = event.Email
    var Name = event.Name

    if(No == null || Birth == null || Email == null || Name == null){
        context.done('FAILED');
    }

    var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        callback(new Error("FAILED"));
      }
    });

    connection.end(function(err) {
        context.done('SUCCESSED');
    });
}

2017年1月27日金曜日

MatterMost hook executed successfully but returned http reponse 500

  • このエントリーをはてなブックマークに追加


MatterMost hook executed successfully but returned http reponse 500

Gitlab オンプレミス版インストールしたので、内蔵されているSlcakのクローン版MatterMostとの連携をしてみました。

MatterMostを有効にする

  • デフォルトではMatterMostが無効になっているため、有効にする必要がある。
# vi /etc/gitlab/gitlab.rb
mattermost_external_url 'http://mattermost.test.com'

Gitlabと違うドメイン名が推奨されてますが、同じドメイン名でポート番号だけ変えればOK。

例えば
http://10.10.100.1:9999

  • GitlabをReconfigure
sudo gitlab-ctl reconfigure

これでURLからアクセスできるようになる。Teamを作って、招待リングを作って関係者招待すればOK

参考
https://docs.gitlab.com/omnibus/gitlab-mattermost/

GitlabとMatterMost連携

MatterMostでWebHookを有効

Teamを右クリック → System console → Service Settings 以下の項目をTrueにする

  • Enable Incoming Webhooks: true
    When true, incoming webhooks will be allowed. To help combat phishing attacks, all posts from webhooks will be labelled by a BOT tag.
  • Enable Outgoing Webhooks: true
    When true, outgoing webhooks will be allowed.
  • Enable Slash Commands: true
    When true, user created slash commands will be allowed.
  • Enable Integrations for Admin Only: true
    When true, user created integrations can only be created by admins.
  • Enable Overriding Usernames from Webhooks and Slash Commands: true
    When true, webhooks and slash commands will be allowed to change the username they are posting as. Note, combined with allowing icon overriding, this could open users up to phishing attacks.
  • Enable Overriding Icon from Webhooks and Slash Commands: true

上記項目を有効にしないと、matterMostのIntegration画面が表示されない。

チャンネルごとにWebHook用URLを作成

Teamを右クリック → Account Settings → Integrations → Incoming Webhooks
対応チャネルを選択し、ADDで追加する。URLが表示されます。

GitlabでWebHook設定

最初に Gitlabプロジェクト → Settings → WebHooks画面でMatterMostのURLを追加したのですが、以下のエラーが表示されます。

Error

hook executed successfully but returned http reponse 500

色々調べたところ、どうやら、Webhooks画面ではなく、Services画面でSlackを有効にして、MatterMostのWebhook URLとチャンネル名入力してできました。

解決

DO NOT create webhook in Gitlab from Projects Settings > Webhooks page.
DO create webhook from Projects Settings > Services > Slack page

2017年1月23日月曜日

AWS Create API Gateway 手順

  • このエントリーをはてなブックマークに追加


AWS Create API Gateway 手順 AWS API Gateway とLambda連携してDBにデータPush用API作成しておりまして、APIGatewayの手順をメモしておきます。
Lambdaの手順はずいぶん省略されましたが、こちらご参照ください。
https://viewse.blogspot.jp/2017/01/aws-lambda-process-exited-before.html
  • API作成 ⇒ 新しいAPI, API名:push-api ⇒ API作成
  • リソースの作成 ⇒ リソース名:applicant、リソースパス:/applicant ⇒ リソース作成
  • メソッドの作成 ⇒ Post追加、統合タイプ:Lambda関数、Lambdaリージョン:eu-west-1、Lambda関数(入力):UpdateApplicantInfo ⇒ 保存
  • メソッド設定 ⇒ メソッドリクエスト、APIキーの必要性:true
  • APIデプロイ ⇒ デプロイされるステージ:新しいステージ、ステージ名:v1 ⇒ デプロイ
  • APIキー作成 ⇒ push-api-key
  • 使用プラン作成 ⇒ 名前:Usage Plan for push-api v1, スロットリングの有効化:無効、クオータを有効にする:無効 次へ ⇒ APIステージの追加、API:push-api、ステージ:v1、次へ ⇒ APIキーを使用量プランに追加、push-api-key、完了
大体こんな感じです。