SlideShare a Scribd company logo
1 of 34
Download to read offline
チャラチャッチャチャラッチャー
でちょっと良いものができた話

Copyright © 2014 AGREX INC.

14年1月18日土曜日
まず、ごめんなさい

Copyright © 2014 AGREX INC.

14年1月18日土曜日

2
まず、ごめんなさい

素晴らしいお話の数々の後では、
完全にお耳汚しですw

Copyright © 2014 AGREX INC.

14年1月18日土曜日

2
プロフィール
てるい まさし

照井 将士
http://www.facebook.com/marcy.terui
(株)アグレックス 札幌事業所 システム部

AWS Certified Solutions Architect
1987年 東京都大田区生まれ
1992年 札幌移住
2011年  (株)アグレックス入社

役職:下っ端・雑用係

好きなサービス
Route53、CloudWatch、RDS(MySQL)

Copyright © 2014 AGREX INC.

14年1月18日土曜日

3
プロフィール
てるい まさし

照井 将士
http://www.facebook.com/marcy.terui
(株)アグレックス 札幌事業所 システム部

AWS Certified Solutions Architect
1987年 東京都大田区生まれ
1992年 札幌移住
2011年  (株)アグレックス入社

役職:下っ端・雑用係

好きなサービス
Route53、CloudWatch、RDS(MySQL)

Copyright © 2014 AGREX INC.

14年1月18日土曜日

3
プロフィール
てるい まさし

照井 将士
http://www.facebook.com/marcy.terui
(株)アグレックス 札幌事業所 システム部

AWS Certified Solutions Architect
1987年 東京都大田区生まれ
1992年 札幌移住
2011年  (株)アグレックス入社

役職:下っ端・雑用係

好きなサービス
Route53、CloudWatch、RDS(MySQL)

Copyright © 2014 AGREX INC.

14年1月18日土曜日

3
プロフィール
てるい まさし

照井 将士
http://www.facebook.com/marcy.terui
(株)アグレックス 札幌事業所 システム部

AWS Certified Solutions Architect
1987年 東京都大田区生まれ
1992年 札幌移住
2011年  (株)アグレックス入社

役職:下っ端・雑用係

好きなサービス

AWSチームリーダーに
クラスアップしました!
※注 現状1人チームだからリーダーなだけw

Route53、CloudWatch、RDS(MySQL)

Copyright © 2014 AGREX INC.

14年1月18日土曜日

3
とある問題がありました。

Copyright © 2014 AGREX INC.

14年1月18日土曜日

4
とある問題がありました。

アカウントが増えてきて、
CloudWatchのアラート状況の
把握が難しくなってきた。

Copyright © 2014 AGREX INC.

14年1月18日土曜日

4
とある問題がありました。

アカウントが増えてきて、
CloudWatchのアラート状況の
把握が難しくなってきた。
コンソールからは当然アカウント単位でしか見れない。
でも、データストアとか監視サーバの管理しなくて良いし、
アカウント単位で誰かに見せたくなったらIAMユーザ使ったりできて良い所も一杯あるから、
辞めてZabbixに集約とかっていうのも微妙なんですよね∼

Copyright © 2014 AGREX INC.

14年1月18日土曜日

4
ウチにはこんな子が居ます。

ウチの警子ちゃん
http://www.isa-j.co.jp/keiko-10th/index[1].html

Copyright © 2014 AGREX INC.

14年1月18日土曜日

5
ウチにはこんな子が居ます。
CloudWatchのアラームが上がると…

ウチの警子ちゃん

ピピピピ

Copyright © 2014 AGREX INC.

14年1月18日土曜日

http://www.isa-j.co.jp/keiko-10th/index[1].html

5
ウチにはこんな子が居ます。
CloudWatchのアラームが上がると…

ウチの警子ちゃん

ピピピピ

http://www.isa-j.co.jp/keiko-10th/index[1].html

なんで鳴ってるの…?
アラートメールどこ行った??
Copyright © 2014 AGREX INC.

14年1月18日土曜日

5
ということで

クロスアカウントで、
アラーム状態を集約して見られる
ダッシュボード的なものが欲しい!

Copyright © 2014 AGREX INC.

14年1月18日土曜日

6
ということで

作ってみました。

Copyright © 2014 AGREX INC.

14年1月18日土曜日

7
どんな感じで作った?

こんな感じです。

Copyright © 2014 AGREX INC.

14年1月18日土曜日

8
ミュージックスタート!古いって言わないでwww

Copyright © 2014 AGREX INC.

14年1月18日土曜日

9
ミュージックスタート!古いって言わないでwww
チャラチャッチャチャラッチャ∼♪
                      ォ"               __,,,.. 、 `、
                     チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、
                    イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ
                    f;;::/            ミヾ  ヽ  、 、  .}
.                    ∨ .::::...         ミ       、 、 ;'i
.                     { ..:;::..         ミ゛       、 、', .}
                   ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }
                  '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|
                    无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ
                    广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ
                    { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'
                    `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'
                     |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/
                    キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'
              ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'
             以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'
             f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'
             〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_
             /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i
.           /    ./         リt;;;;;;;;; ::::         /  `t、
           /     /.         / :i;;;;::....         /    / `、
.          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、
         /     /     ,. - '"   |   `、;:    ,. イ        /     `ー
       /~\  ,... /,. - ' "      /-- .、  〉-r''"         /
    ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'
  r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./
  {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,'

左
Copyright © 2014 AGREX INC.

14年1月18日土曜日

右
9
ミュージックスタート!古いって言わないでwww
チャラチャッチャチャラッチャ∼♪
                      ォ"               __,,,.. 、 `、
                     チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、
                    イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ
                    f;;::/            ミヾ  ヽ  、 、  .}
.                    ∨ .::::...         ミ       、 、 ;'i
.                     { ..:;::..         ミ゛       、 、', .}
                   ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }
                  '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|
                    无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ
                    广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ
                    { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'
                    `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'
                     |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/
                    キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'
              ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'
             以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'
             f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'
             〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_
             /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i
.           /    ./         リt;;;;;;;;; ::::         /  `t、
           /     /.         / :i;;;;::....         /    / `、
.          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、
         /     /     ,. - '"   |   `、;:    ,. イ        /     `ー
       /~\  ,... /,. - ' "      /-- .、  〉-r''"         /
    ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'
  r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./
  {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,'

(((((【右から】c(・ェ・c`)三(´っ・ェ・)っ((((((【左へ】受け流す∼♪ 

左
Copyright © 2014 AGREX INC.

14年1月18日土曜日

右
9
ミュージックスタート!古いって言わないでwww
チャラチャッチャチャラッチャ∼♪
                      ォ"               __,,,.. 、 `、
                     チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、
                    イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ
                    f;;::/            ミヾ  ヽ  、 、  .}
.                    ∨ .::::...         ミ       、 、 ;'i
.                     { ..:;::..         ミ゛       、 、', .}
                   ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }
                  '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|
                    无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ
                    广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ
                    { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'
                    `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'
                     |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/
                    キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'
              ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'
             以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'
             f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'
             〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_
             /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i
.           /    ./         リt;;;;;;;;; ::::         /  `t、
           /     /.         / :i;;;;::....         /    / `、
.          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、
         /     /     ,. - '"   |   `、;:    ,. イ        /     `ー
       /~\  ,... /,. - ' "      /-- .、  〉-r''"         /
    ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'
  r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./
  {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,'

左
Copyright © 2014 AGREX INC.

14年1月18日土曜日

右
9
わかりましたか?

すいません。
ちゃんと説明します。

Copyright © 2014 AGREX INC.

14年1月18日土曜日

10
こんな感じです。
require dirname(__DIR__) . '/init.php';
use AwsCloudWatchCloudWatchClient;
use DashBoardUtilPropaties;
$data = array();
foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) {
if($fileInfo->isDot()) continue;
$prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename());
$cloudwatch = CloudWatchClient::factory(array(
'key' => $prop->get(PROPATIES_ACCESS_KEY),
'secret' => $prop->get(PROPATIES_SECRET_KEY),
'region' => AWS_REGION
));
$model = $cloudwatch->describeAlarms();
$data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms");
}
$rows = "";
foreach ($data as $systemName => $alarms) {
foreach ($alarms as $alarm) {
$rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}',
'{$alarm['StateValue']}'],n";
}
}
$date = date("Y-m-d H:i:s");
$content = "
<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', {packages:['table']});
google.setOnLoadCallback(drawTable);
function drawTable() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'SystemName');
data.addColumn('string', 'AlarmName');
data.addColumn('string', 'AlarmDescription');
data.addColumn('string', 'MetricName');
data.addColumn('string', 'StateValue');
data.addRows([
{$rows}
]);
var table = new google.visualization.Table(document.getElementById('table_div'));
var formatter = new google.visualization.ColorFormat();
formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red');
formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange');
formatter.addRange('OK', null, 'white', '#33ff33');
formatter.format(data, 4);
table.draw(data, {allowHtml: true, showRowNumber: true});
}
</script>
</head>
<body>
<h1>{$date}時点</h1>
<div id='table_div'></div>
</body>
</html>
";
echo $content;

Copyright © 2014 AGREX INC.

14年1月18日土曜日

11
こんな感じです。
require dirname(__DIR__) . '/init.php';
use AwsCloudWatchCloudWatchClient;
use DashBoardUtilPropaties;
$data = array();
foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) {
if($fileInfo->isDot()) continue;
$prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename());
$cloudwatch = CloudWatchClient::factory(array(
'key' => $prop->get(PROPATIES_ACCESS_KEY),
'secret' => $prop->get(PROPATIES_SECRET_KEY),
'region' => AWS_REGION
));
$model = $cloudwatch->describeAlarms();
$data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms");
}

①AWS CloudWatch APIからデータもらう
 ×アカウント数

$rows = "";
foreach ($data as $systemName => $alarms) {
foreach ($alarms as $alarm) {
$rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}',
'{$alarm['StateValue']}'],n";
}
}
$date = date("Y-m-d H:i:s");
$content = "
<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', {packages:['table']});
google.setOnLoadCallback(drawTable);
function drawTable() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'SystemName');
data.addColumn('string', 'AlarmName');
data.addColumn('string', 'AlarmDescription');
data.addColumn('string', 'MetricName');
data.addColumn('string', 'StateValue');
data.addRows([
{$rows}
]);
var table = new google.visualization.Table(document.getElementById('table_div'));
var formatter = new google.visualization.ColorFormat();
formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red');
formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange');
formatter.addRange('OK', null, 'white', '#33ff33');
formatter.format(data, 4);
table.draw(data, {allowHtml: true, showRowNumber: true});
}
</script>
</head>
<body>
<h1>{$date}時点</h1>
<div id='table_div'></div>
</body>
</html>
";
echo $content;

Copyright © 2014 AGREX INC.

14年1月18日土曜日

11
こんな感じです。
require dirname(__DIR__) . '/init.php';
use AwsCloudWatchCloudWatchClient;
use DashBoardUtilPropaties;
$data = array();
foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) {
if($fileInfo->isDot()) continue;
$prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename());
$cloudwatch = CloudWatchClient::factory(array(
'key' => $prop->get(PROPATIES_ACCESS_KEY),
'secret' => $prop->get(PROPATIES_SECRET_KEY),
'region' => AWS_REGION
));
$model = $cloudwatch->describeAlarms();
$data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms");
}

①AWS CloudWatch APIからデータもらう
 ×アカウント数

$rows = "";
foreach ($data as $systemName => $alarms) {
foreach ($alarms as $alarm) {
$rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}',
'{$alarm['StateValue']}'],n";
}
}
$date = date("Y-m-d H:i:s");
$content = "
<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', {packages:['table']});
google.setOnLoadCallback(drawTable);
function drawTable() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'SystemName');
data.addColumn('string', 'AlarmName');
data.addColumn('string', 'AlarmDescription');
data.addColumn('string', 'MetricName');
data.addColumn('string', 'StateValue');
data.addRows([
{$rows}
]);
var table = new google.visualization.Table(document.getElementById('table_div'));
var formatter = new google.visualization.ColorFormat();
formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red');
formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange');
formatter.addRange('OK', null, 'white', '#33ff33');
formatter.format(data, 4);
table.draw(data, {allowHtml: true, showRowNumber: true});
}
</script>
</head>
<body>
<h1>{$date}時点</h1>
<div id='table_div'></div>
</body>
</html>
";
echo $content;

Copyright © 2014 AGREX INC.

14年1月18日土曜日

11

②受け取った内容を軽く整形する
こんな感じです。
require dirname(__DIR__) . '/init.php';
use AwsCloudWatchCloudWatchClient;
use DashBoardUtilPropaties;
$data = array();
foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) {
if($fileInfo->isDot()) continue;
$prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename());
$cloudwatch = CloudWatchClient::factory(array(
'key' => $prop->get(PROPATIES_ACCESS_KEY),
'secret' => $prop->get(PROPATIES_SECRET_KEY),
'region' => AWS_REGION
));
$model = $cloudwatch->describeAlarms();
$data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms");
}

①AWS CloudWatch APIからデータもらう
 ×アカウント数

$rows = "";
foreach ($data as $systemName => $alarms) {
foreach ($alarms as $alarm) {
$rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}',
'{$alarm['StateValue']}'],n";
}
}
$date = date("Y-m-d H:i:s");
$content = "
<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', {packages:['table']});
google.setOnLoadCallback(drawTable);
function drawTable() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'SystemName');
data.addColumn('string', 'AlarmName');
data.addColumn('string', 'AlarmDescription');
data.addColumn('string', 'MetricName');
data.addColumn('string', 'StateValue');
data.addRows([
{$rows}
]);
var table = new google.visualization.Table(document.getElementById('table_div'));
var formatter = new google.visualization.ColorFormat();
formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red');
formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange');
formatter.addRange('OK', null, 'white', '#33ff33');
formatter.format(data, 4);
table.draw(data, {allowHtml: true, showRowNumber: true});
}
</script>
</head>
<body>
<h1>{$date}時点</h1>

③Google Charts APIに投げる

<div id='table_div'></div>
</body>
</html>
";
echo $content;

Copyright © 2014 AGREX INC.

14年1月18日土曜日

②受け取った内容を軽く整形する

11
つまり

Cloudwatch API (右) から
Google Charts API (左) に
渡す(受け流す)だけ

Copyright © 2014 AGREX INC.

14年1月18日土曜日

12
…で、こんなんできましたー

Copyright © 2014 AGREX INC.

14年1月18日土曜日

13
…で、こんなんできましたー
INSUFICIENT_DATAがオレンジ
ALARMが赤になる
各ヘッダをクリックすると昇順降順の並べ替えができる

Copyright © 2014 AGREX INC.

14年1月18日土曜日

13
参考とまとめ

Copyright © 2014 AGREX INC.

14年1月18日土曜日

14
参考とまとめ
AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります)
http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html

Copyright © 2014 AGREX INC.

14年1月18日土曜日

14
参考とまとめ
AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります)
http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html
Google Charts
https://google-developers.appspot.com/chart/

Copyright © 2014 AGREX INC.

14年1月18日土曜日

14
参考とまとめ
AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります)
http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html
Google Charts
https://google-developers.appspot.com/chart/

ムーディ○山の現在
http://blog.livedoor.jp/aokichanyon444/archives/54385877.html

Copyright © 2014 AGREX INC.

14年1月18日土曜日

14
参考とまとめ
AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります)
http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html
Google Charts
https://google-developers.appspot.com/chart/

ムーディ○山の現在
http://blog.livedoor.jp/aokichanyon444/archives/54385877.html

思わず歌っちゃうほど簡単に、
ちょっと良いものができました。
他にも、異なるAPI同士を
組み合わせることで、
手間無く良いものができたりする例は一杯ありそう。
Copyright © 2014 AGREX INC.

14年1月18日土曜日

14
ありがとうございました!

Copyright © 2014 AGREX INC.

14年1月18日土曜日

15

More Related Content

More from Terui Masashi

クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)Terui Masashi
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless PluginsTerui Masashi
 
Unlimited Frameworks
Unlimited FrameworksUnlimited Frameworks
Unlimited FrameworksTerui Masashi
 
Cloud Vsion APIによるGUIの検証自動化
Cloud Vsion APIによるGUIの検証自動化Cloud Vsion APIによるGUIの検証自動化
Cloud Vsion APIによるGUIの検証自動化Terui Masashi
 
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜Terui Masashi
 
Infrastructure as Codeってなんだったっけ?
Infrastructure as Codeってなんだったっけ?Infrastructure as Codeってなんだったっけ?
Infrastructure as Codeってなんだったっけ?Terui Masashi
 
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜Terui Masashi
 
R○Sに学ぶイマドキのMySQL構築運用
���������������������������������������R○Sに学ぶイマドキのMySQL構築運用���������������������������������������R○Sに学ぶイマドキのMySQL構築運用
R○Sに学ぶイマドキのMySQL構築運用Terui Masashi
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングTerui Masashi
 
マルチクラウド #とは
マルチクラウド #とはマルチクラウド #とは
マルチクラウド #とはTerui Masashi
 
Lambda(Python)のデプロイについて考えたというか作った
Lambda(Python)のデプロイについて考えたというか作ったLambda(Python)のデプロイについて考えたというか作った
Lambda(Python)のデプロイについて考えたというか作ったTerui Masashi
 
Google App Engine for PHPとそのローカル開発環境について
Google App Engine for PHPとそのローカル開発環境についてGoogle App Engine for PHPとそのローカル開発環境について
Google App Engine for PHPとそのローカル開発環境についてTerui Masashi
 
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」Terui Masashi
 
ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!Terui Masashi
 
Multi Cloud Design Pattern(Beta)
Multi Cloud Design Pattern(Beta)Multi Cloud Design Pattern(Beta)
Multi Cloud Design Pattern(Beta)Terui Masashi
 
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話Terui Masashi
 
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話Terui Masashi
 
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証Terui Masashi
 
初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for Go初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for GoTerui Masashi
 
Googleの○○にありがとう
Googleの○○にありがとうGoogleの○○にありがとう
Googleの○○にありがとうTerui Masashi
 

More from Terui Masashi (20)

クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
 
Unlimited Frameworks
Unlimited FrameworksUnlimited Frameworks
Unlimited Frameworks
 
Cloud Vsion APIによるGUIの検証自動化
Cloud Vsion APIによるGUIの検証自動化Cloud Vsion APIによるGUIの検証自動化
Cloud Vsion APIによるGUIの検証自動化
 
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜
 
Infrastructure as Codeってなんだったっけ?
Infrastructure as Codeってなんだったっけ?Infrastructure as Codeってなんだったっけ?
Infrastructure as Codeってなんだったっけ?
 
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
 
R○Sに学ぶイマドキのMySQL構築運用
���������������������������������������R○Sに学ぶイマドキのMySQL構築運用���������������������������������������R○Sに学ぶイマドキのMySQL構築運用
R○Sに学ぶイマドキのMySQL構築運用
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
 
マルチクラウド #とは
マルチクラウド #とはマルチクラウド #とは
マルチクラウド #とは
 
Lambda(Python)のデプロイについて考えたというか作った
Lambda(Python)のデプロイについて考えたというか作ったLambda(Python)のデプロイについて考えたというか作った
Lambda(Python)のデプロイについて考えたというか作った
 
Google App Engine for PHPとそのローカル開発環境について
Google App Engine for PHPとそのローカル開発環境についてGoogle App Engine for PHPとそのローカル開発環境について
Google App Engine for PHPとそのローカル開発環境について
 
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」
 
ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!
 
Multi Cloud Design Pattern(Beta)
Multi Cloud Design Pattern(Beta)Multi Cloud Design Pattern(Beta)
Multi Cloud Design Pattern(Beta)
 
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
 
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
 
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証
 
初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for Go初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for Go
 
Googleの○○にありがとう
Googleの○○にありがとうGoogleの○○にありがとう
Googleの○○にありがとう
 

Recently uploaded

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (12)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Jaws20140117

  • 4. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  • 5. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  • 6. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  • 7. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス AWSチームリーダーに クラスアップしました! ※注 現状1人チームだからリーダーなだけw Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  • 18. ミュージックスタート!古いって言わないでwww チャラチャッチャチャラッチャ∼♪                       ォ"               __,,,.. 、 `、                      チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、                     イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ                     f;;::/            ミヾ  ヽ  、 、  .} .                    ∨ .::::...         ミ       、 、 ;'i .                     { ..:;::..         ミ゛       、 、', .}                    ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }                   '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|                     无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ                     广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ                     { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'                     `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'                      |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/                     キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'               ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'              以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'              f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'              〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_              /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i .           /    ./         リt;;;;;;;;; ::::         /  `t、            /     /.         / :i;;;;::....         /    / `、 .          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、          /     /     ,. - '"   |   `、;:    ,. イ        /     `ー        /~\  ,... /,. - ' "      /-- .、  〉-r''"         /     ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'   r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./   {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,' 左 Copyright © 2014 AGREX INC. 14年1月18日土曜日 右 9
  • 19. ミュージックスタート!古いって言わないでwww チャラチャッチャチャラッチャ∼♪                       ォ"               __,,,.. 、 `、                      チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、                     イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ                     f;;::/            ミヾ  ヽ  、 、  .} .                    ∨ .::::...         ミ       、 、 ;'i .                     { ..:;::..         ミ゛       、 、', .}                    ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }                   '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|                     无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ                     广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ                     { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'                     `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'                      |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/                     キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'               ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'              以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'              f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'              〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_              /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i .           /    ./         リt;;;;;;;;; ::::         /  `t、            /     /.         / :i;;;;::....         /    / `、 .          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、          /     /     ,. - '"   |   `、;:    ,. イ        /     `ー        /~\  ,... /,. - ' "      /-- .、  〉-r''"         /     ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'   r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./   {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,' (((((【右から】c(・ェ・c`)三(´っ・ェ・)っ((((((【左へ】受け流す∼♪  左 Copyright © 2014 AGREX INC. 14年1月18日土曜日 右 9
  • 20. ミュージックスタート!古いって言わないでwww チャラチャッチャチャラッチャ∼♪                       ォ"               __,,,.. 、 `、                      チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、                     イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ                     f;;::/            ミヾ  ヽ  、 、  .} .                    ∨ .::::...         ミ       、 、 ;'i .                     { ..:;::..         ミ゛       、 、', .}                    ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }                   '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|                     无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ                     广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ                     { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'                     `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'                      |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/                     キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'               ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'              以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'              f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'              〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_              /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i .           /    ./         リt;;;;;;;;; ::::         /  `t、            /     /.         / :i;;;;::....         /    / `、 .          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、          /     /     ,. - '"   |   `、;:    ,. イ        /     `ー        /~\  ,... /,. - ' "      /-- .、  〉-r''"         /     ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'   r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./   {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,' 左 Copyright © 2014 AGREX INC. 14年1月18日土曜日 右 9
  • 22. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 11
  • 23. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } ①AWS CloudWatch APIからデータもらう  ×アカウント数 $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 11
  • 24. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } ①AWS CloudWatch APIからデータもらう  ×アカウント数 $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 11 ②受け取った内容を軽く整形する
  • 25. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } ①AWS CloudWatch APIからデータもらう  ×アカウント数 $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> ③Google Charts APIに投げる <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 ②受け取った内容を軽く整形する 11
  • 26. つまり Cloudwatch API (右) から Google Charts API (左) に 渡す(受け流す)だけ Copyright © 2014 AGREX INC. 14年1月18日土曜日 12
  • 29. 参考とまとめ Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  • 30. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  • 31. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Google Charts https://google-developers.appspot.com/chart/ Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  • 32. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Google Charts https://google-developers.appspot.com/chart/ ムーディ○山の現在 http://blog.livedoor.jp/aokichanyon444/archives/54385877.html Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  • 33. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Google Charts https://google-developers.appspot.com/chart/ ムーディ○山の現在 http://blog.livedoor.jp/aokichanyon444/archives/54385877.html 思わず歌っちゃうほど簡単に、 ちょっと良いものができました。 他にも、異なるAPI同士を 組み合わせることで、 手間無く良いものができたりする例は一杯ありそう。 Copyright © 2014 AGREX INC. 14年1月18日土曜日 14