2019年8月26日月曜日

aws オートスケーリング時に追加されたインスタンスに名前を自動設定

awsのオートスケール機能を使ってインスタンスが立ち上げられた時に、名前が設定されてないことに気づきました。どうずればオートスケーリングで追加されたインスタンスに自動的に名前をつけられるのかを調べてみました。

結論からいうと、Auto Scalingのタグ機能を使えばインスタンスが立ち上げられ時に自動的に名前を作られることができます。

やり方は以下の通りです。
・管理コンソールからEC2の管理画面を開きます。
・Auto Scalingグループから対象Auto Scalingグループを選択します。
・「タグ」タブをクリックし、以下のタグを追加します。
キー:Name、値:インスタンスのName

2019年8月22日木曜日

phpのexec関数でコマンド実行時に、エラーが発生した場合はエラーが表示されていません

phpのexec関数でawsのコマンドを実行したら、エラーが発生したが、何も表示されませんでした。


<?php

$ret = exec("aws s3 ls", $out, $status);
var_dump($ret);
var_dump($out);
var_dump($status);

$statusの値を確認したところ、0ではないことをわかりました。ただ、エラーも何も出力されてないので、どこか駄目なのかさっぱりです。

そんなとき、標準エラーも標準出力へ吐き出すように設定すれば解決できます。

標準エラー出力も標準出力へ吐き出すには2>&1を使います。
改修後、以下になります。


<?php

$ret = exec("aws s3 ls 2>&1", $out, $status);
var_dump($ret);
var_dump($out);
var_dump($status);
再度実行後、ようやくエラーが表示されるようになりました。


Unable to locate credentials. You can configure credentials by running "aws configure
httpdはapacheユーザーとして実行されていますが、apacheユーザーのaws設定がうまくできてないことがわかりました。

2019年8月21日水曜日

php CondeIgniterでmysqlの「INSERT INTO ... ON DUPLICATE KEY UPDATE」を実現する

Mysqlの「INSERT...ON DUPLICATE KEY UPDATE構文」を使えば、レコードがなければ新規作成、あればアップデートを簡単に実現できます。

php CondeIgniterなら、同じような構文がないかを調べてみました。
幸いreplaceを使えば、同等な機能を得られます。 例:↓

$data = array(
        'title' => 'My title',
        'name'  => 'My Name',
        'date'  => 'My date'
);

$this->db->replace('table', $data);