2017年6月27日火曜日

CentOS Pamでケルベロス認証 グループ制限

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


CentOS Pamでケルベロス認証 グループ制限 Pamでケルベロス認証のための設定をメモしておきます。
グループでログイン制御することもできます。
参考情報
https://www.linux.iastate.edu/content/using-pam-kerberos-authentication-and-group-access-control
/etc/pam.d/system-authのサンプル
testgroup以外のユーザーはログインできないようにする
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
# only allow auth for member of testgroup
auth        requisite    pam_succeed_if.so user ingroup testgroup
auth        requisite     pam_succeed_if.so uid >= 500 quiet
# for kerberos
auth        sufficient    pam_krb5.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
# for kerberos
account     [default=bad success=ok user_unknown=ignore] pam_krb5.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
# for kerberos
password    sufficient    pam_krb5.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
# for kerberos
session     optional      pam_krb5.so
グループ制御ではingroup, notingroupというのがあります。
ingroupはグループ内のユーザーしかログインできない
notingroupはグループに所属していないユーザーしかログインできない。

2017年6月15日木曜日

Hortonworks ODBCでHIVEServerに接続する設定手順

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


HortonWorks ODBCでHIVEServerに接続する設定手順 ODBCでHIVEに接続する手順をメモしておきます。

HortonWorksサイトからODBCドライバーをダウンロード

https://jp.hortonworks.com/downloads/
Hortonworks ODBC Driver for Apache Hive (v2.1.7)

ODBCドライバーをインストール

 $ sudo rpm -ivh hive-odbc-native-2.1.7.1010-1.el6.x86_64.rpm

 インストール先確認
 $ ls /usr/lib/hive/lib/native

.odbc.iniを作成

 $ cd /usr/lib/hive/lib/native/Linux-amd64-64
 $ cat .odbc.ini
 ---------------------------------------------------------------
 [ODBC]

 [ODBC Data Sources]
 HIVE

 [HIVE]
 Driver=/usr/lib/hive/lib/native/Linux-amd64-64/libhortonworkshiveodbc64.so
 #環境ごとに変更
 HOST=srv.example.com
 PORT=10000
 Schema=
 ServiceDiscoveryMode=0
 ZKNamespace=
 HiveServerType=2
 #kerberos認証にするため、AuthMechを1に設定
 AuthMech=1
 ThriftTransport=1
 UseNativeQuery=0
 UID=hue
 #環境ごとに変更
 KrbHostFQDN=srv.example.com
 KrbServiceName=hive
 #環境ごとに変更
 KrbRealm=example.com
 SSL=0
 TwoWaySSL=0
 ClientCert=
 ClientPrivateKey=
 ClientPrivateKeyPassword=
 ---------------------------------------------------------------
 権限変更、しないとエラーが出る可能性があります。
 $ chmod 777 .odbc.ini
サンプルファイルは以下にあります。
 /usr/lib/hive/lib/native/hiveodbc/Setup/odbc.ini

環境変数設定

xport ODBCINI=/usr/lib/hive/lib/native/Linux-amd64-64/.odbc.ini
 or
/etc/profileにexport ODBCINI=/usr/lib/hive/lib/native/Linux-amd64-64/.odbc.ini を追加

参考Kerberos設定

$ cat /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
#includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 30d
 renew_lifetime = 7d
 forwardable = true

# for One-Way Trust with Active Directory
 permitted_enctypes   = des-cbc-crc des-cbc-md5 arcfour-hmac aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96
 udp_preference_limit = 1

[realms]
 EXAMPLE.COM = {
  kdc = or
hostname> admin_server = or hostname> } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

ERROR

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "/tmp/hound/hound/tbx/hoover/_hoover_price.py", line 75, in fetch_hoover_price
    verbose=verbose
  File "/tmp/hound/hound/tbx/odbc/_odbc.py", line 55, in execute
    autocommit=True
pyodbc.Error: ('08001', '[08001] [unixODBC][Hortonworks][ODBC] (10380) Unable to establish a connection with data source. Missing settings: {[Host] [Port]} (10380) (SQLDriverConnect)')
  • 解決
    .odbc.iniファイルの権限を見直す 777にするとか

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、完了
大体こんな感じです。

Terraform Aws RDS parameter group 適用時エラー

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


Terraform Aws RDS parameter group 適用時エラー TerrafromでAWS RDS作成時にDBパラメーターグループにパラメーターを指定してTerraform apply実行すると以下のエラーが出たりします。

sample .tf file

# Create parameter group for mariadb
resource "aws_db_parameter_group" "db-pg" {
    name = "test-mariadb10-1"
    family = "mariadb10.1"
    description = "mariadb parameter group for test project"

    parameter {
        name = "character-set-client-handshake"
        value = "0"
    }
    parameter {
        name = "character_set_client"
        value = "utf8"
    }
    parameter {
        name = "character_set_connection"
        value = "utf8"
    }
    parameter {
        name = "character_set_database"
        value = "utf8"
    }
    parameter {
        name = "character_set_results"
        value = "utf8"
    }
    parameter {
        name = "character_set_server"
        value = "utf8"
    }
    parameter {
        name = "log_bin_trust_function_creators"
        value = "1"
    }
    parameter {
        name = "max_allowed_packet"
        value = "10240000"
    }
    parameter {
        name = "skip-character-set-client-handshake"
        value = "1"
    }
}

terraform apply error

Error modifying DB Parameter Group: InvalidParameterCombination: cannot use immediate apply method for static parameter status code: 400

原因

DB再起動しないと適用できないパラメータの場合は、すぐ適用できないため、失敗する

解決策

apply_methodの値をpending-rebootに設定する。デフォルトではImmediateになっている
# Create parameter group for mariadb
resource "aws_db_parameter_group" "gmaridb-pg" {
    name = "test-mariadb10-1"
    family = "mariadb10.1"
    description = "mariadb parameter group for test project"

    parameter {
        name = "character-set-client-handshake"
        value = "0"
        //default is immediate
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "character_set_client"
        value = "utf8"
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "character_set_connection"
        value = "utf8"
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "character_set_database"
        value = "utf8"
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "character_set_results"
        value = "utf8"
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "character_set_server"
        value = "utf8"
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "log_bin_trust_function_creators"
        value = "1"
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "max_allowed_packet"
        value = "10240000"
        apply_method = "pending-reboot" 
    }
    parameter {
        name = "skip-character-set-client-handshake"
        value = "1"
        apply_method = "pending-reboot" 
    }
}

2017年1月20日金曜日

Laravelでファイルの種類を限定してファイルをアップロードする

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


Laravelでファイルの種類を限定してファイルをアップロードする Laravelでファイルアップロードサイトを作っていて、アップロードできるファイルの種類(画像、エクセルとか)を制限したいと思って、色々調べたのですが、以下のように簡単にできます。

Form sample

{!! Form::open(['class' => 'form-upload', 'url'=>'/upload/submit','files'=>true]) !!}

{{ Form::label('file','Upload a file.',array('id'=>'','class'=>'')) }}
    <div class="input-group">         
        <label class="input-group-btn">
        <span class="btn btn-primary">
            Select File
            {!! Form::file('file', ['style' => 'display: none;', 'accept' => '.jpg,.jpeg,.png,.gif,.pdf']) !!}
        </span>
        </label>
        <input style="width:350px;" type="text" class="form-control" readonly>
    </div>
    <br>
    
    <button class="btn btn-lg btn-primary" type="submit">Upload</button>
{!! Form::close() !!}
以下の一行でファイルの拡張子を指定することで、jpg, jpeg, png, gif, pdfのファイルだけを制御できます
{!! Form::file('file', ['style' => 'display: none;', 'accept' => '.jpg,.jpeg,.png,.gif,.pdf']) !!}
実際にブラウザでHTMLソースをみてみたら、Inputに変換されていることがわかります。
<span class="btn btn-primary">
    Select file
    <input style="display: none;" accept=".jpg,.jpeg,.png,.gif,.pdf" name="file_1" type="file">
</span>

JavaScript

他にJavaScriptでも制御できます。
例、Excelファイル(.xls、.xlsx)だけをアップロードできるようにする
<script type="text/javascript">

    function SetAccept() {
        document.getElementById("file").accept = "application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    }
    SetAccept();
    </script>
imageだとimage/jpeg, image/gifなどを切り替えてよいです。
MIMEタイプ一覧をこちら参照できます。
http://www.geocities.co.jp/Hollywood/9752/mime.html

2017年1月16日月曜日

AWS Lambda Process exited before completing request error

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


AWS Lambda Process exited before completing request error LambdaでRDS(mariadb)にデータをプッシュするAPIを作っています。

Nodejs sample code

var mysql = require('mysql');

exports.handler = function(event,context){

    var connection = mysql.createConnection({
      host     : 'xxx.xxx.eu-west-1.rds.amazonaws.com', //RDSのエンドポイント
      user     : 'xxxxxx', //MySQLのユーザ名
      password : 'xxxxxx', //MySQLのパスワード
      database : 'xxxxxx'
    });

    connection.connect();

    var name = event.Name
    var email = event.Email
    var birth = event.Birth

    var insert_sql = "insert into User (Name, Email, Birth) value ('" + name +"','" + email +"','" + birth + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        throw err;
      }
    });

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

}

Mac でコードをZIPする

$ mkdir lambda-func
$ cd lambda-func
$ brew install Nodejs
$ npm install mysql
$ ls
UpdateDB.js node_modules
$ zip -r lambda-func.zip UpdateDB.js node_modules/

Upload lambda-func.zip to lambda and set handler to UpdateDB.handler (UpdateDB.js  + exports.handler)

Error

RequestId: 1682cd4d-dbea-11e6-81d7-03af694d0c84 Process exited before completing request
Process exited before completing requestのエラーがよく出ています。
色々調べたのですが、原因は以下何種あります。
  • Time out DBに接続して処理に時間がかかった。
  • Memory 割り当てるMemoryが足りなかった。
    REPORT RequestId: 1682cd4d-dbea-11e6-81d7-03af694d0c84 Duration: 3658.20 ms Billed Duration: 3700 ms Memory Size: 128 MB Max Memory Used: 128 MB

解決策

[Configuration]タブでMemoryとTime outを上げる。
他の原因かもしれません。ただ言えるのは、スクリプト内でどこかでエラーになって処理終わらなくてこのエラーが出力されていると言う感じです。DebugにConsole.logをこまめに使ってデバックしましょう

2017年1月12日木曜日

AWS Centos6.5 nginx php-fpm インストール

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


AWS Centos6.5 nginx php-fpm インストール AWSのEC2(CentOS 6.5)にnginx、PHP-fpmのインストール手順をメモしておきます。

nginx install

sudo sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
sudo yum install nginx

php-fpm install

sudo yum install php
yum list | grep php-fpm

php-fpm 設定

sudo cp -p /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org
sudo sed -i -e 's/user = apache/user = nginx/' /etc/php-fpm.d/www.conf

sudo sed -i -e 's/group = apache/group = nginx/' /etc/php-fpm.d/www.conf

直接viで編集してもよい。ユーザー、groupをnginxに変更

nginx 設定

例:rootディレクトリを/var/www/htmlにする
sudo cp -p /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
以下の様な感じで変更
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /var/www/html;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

起動

sudo /etc/init.d/php-fpm start
sudo /etc/init.d/nginx start

自動起動を設定
sudo chkconfig nginx on
sudo chkconfig php-fpm on

動作確認

sudo echo '' > /var/www/html/phpinfo.php
この状態だと、アクセス拒否されてできないです。
AWSインスタンスで既定でiptables,ip6tablesが有効になっているからです。
無効にする
sudo /etc/init.d/iptables stop
sudo /etc/init.d/ip6tables stop
sudo chkconfig iptables off
sudo chkconfig ip6tables off
以上でnginxとphp連携できた。