엔지니어들이 면접에서 물어야 할 질문들

이것도 geeknews에 올라온 글. 내가 보기엔 알짜정보가 많다... https://news.hada.io/topic?id=6862&utm_source=slack&utm_medium=bot&utm_campaign=T13KRBZU4 https://posthog.com/blog/what-to-ask-in-interviews "이 질문들은 매우 직설적이긴 하지만, 이에 대해 좋지 않은 반응을 보이는 회사는 좋은 직장이 아닐 수 있습니다" 이 회사는 Product-Market-Fit 한가요? PMF한지 자신에게 질문한 적이 있나요? PMF를 언제 달성했나요? 어떻게 아나요? PMF를 달성하기 위해 뭘 해야 하나요? 매출은 얼마인가요? 1년전에는 얼마였나요? 일 활성사용자(DAU)는 얼마인가요? 피해야 할 회사들 : Pre-PMF를 설명하는데 시간을 많이 쓰지 않는 창업자들 제품이나 그들이 주는 혜택이 뭔지 이해하기 어려운 회사들 문제를 찾는 해결책들 Runway가 얼마나 남아있나요? 지출이 합리적인 것처럼 보이나요? Default Alive 한가요?→ 지금은 수익성이 없지만, 자금이 바닥나기 전에 수익을 낼 수 있을만큼 빠르게 성장 가능한가 Runway는 얼마인가요? 이걸 계산하기 위한 가정은 뭔가요? 펀드레이징 계획은 어떻게 되나요? 피해야 할 회사들 : Default Alive 한지 모르거나, 신경쓰지 않는 회사 시간이 모자르거나 느려서, Default Alive 해질 것 같지 않은 회사 생존을 위해서 단시간내에 매출의 급격한 증가를 가정하는 회사 곧 자금이 바닥나기 때문에 펀드레이징을 하고 있지만, 라운드 클로징을 하지 않은 회사 문화는 어떤가요? 회사의 가치는 뭐고, 왜 그것인가요? 그 가치를 따르는 구체적인 방법들을 알려주실수 있나요? 뭘 만들지 누가 결정하나요 ? 일반적인 하루(근무일)는 어떤 모습인가요? 어떤 미래를 기대하나요 ? 어떤 것이 당신에게 동기를 부여하나요? 지금까지 가장 자랑스러운 것은 뭔가요? 회

phpでAWSのstatusページから異常を検知してchatworkへ通知する

 Amazonは「http://status.aws.amazon.com」からAWSのサービス状況を確認できるページを提供している。ブラウザでアクセスすると各リージョンのサービス簡単に確認できる。そして、RSSにも対応しているのでRSSフィーダーを使ってサービスに異常が発生した場合、通知してくれる。

 

今回はphpを使ってRSSフィーダーを定期的にチェックし、新しいアイテムがフィーダーされたらそれを確認する仕組みを作ってみた。たまにしか起きないけど1回起きたら大きい影響を与えるので定期的に確認した方が絶対いい。

 

確認対象サービスはリージョンと関係ないグローバルサービスとリージョンに装束されるサービので2つに分けた。別に1つにしてもいいけど、RSSフィーダーのURLが微妙に違うので分けただけ。

 

$awspub = array (
  "cloudfront", "route53", "route53domainregistration", \
  "import-export", "management-console", "marketplace", \
  "awswaf"
);
 
$awsreg = array (
  "apigateway", "cloudwatch", "dynamodb", "ecr", "ecs", "ec2", \
  "elb", "emr", "elasticache", "glacier","kinesis", "rds", \
  "route53", "sns", "sqs", "s3", "vpc", "autoscaling", \
  "certificatemanager","cloudformation", "cloudtrail", "codedeploy", \
  "directconnect", "elasticbeanstalk", "iam","internetconnectivity", \
  "kms", "lambda", "opsworks", "state", "storagegateway"
);

その後は時間を変換してくれる関数を作った。status.aws.amazon.comのページはPSTかPDTで表示されている。通知してくれるならやさしくちゃんとJSTへ変換しよう。変換した日付をそのまま出力することもありだけどこの後時間の演算が必要いになったので結局 timestampへ変換してその値を返すことにした。


function dateToJST($date) {
 
  $newdate=DateTime::createFromFormat("D, d M Y H:i:s T", $date);
  $timezone=date_format($newdate, "T");
  if      ($timezone == "PST") { $adjuster="+17 hour"; }
  else if ($timezone == "PDT") { $adjuster="+16 hour"; }
 
  return strtotime($adjuster, strtotime(date_format($newdate, "Y-m-d H:i:s")));
}

 

後は関数かした取得コードを実行するだけ。引数としてグローバル(glb)か、リージョン(reg)なのかを教えてあげる必要がある。ここでは通知先をchatworkの板にしてある。chatworkのAPIを利用して指定の板へメッセージを書き出すことにした。以下にフールコードを残す。


#!/usr/bin/php
<?php
$workdir="/tmp/awsstatus";
$flgfile="$workdir/chk_aws_status.flg";
$interval=60*15; #15m with crontab
$now=time();
$TOKN="xxxxxxxxxxxxxxxxx"; ⇒ chatworkのapi token key
$CWEP="https://api.chatwork.com/v2/rooms";
$RMID="xxxxxxxx"; # chatworkの通知先板番号
 
if (file_get_contents($flgfile) == 1) {
  echo "stop script excute by flag file '$flgfile'\n\n";
  exit;
}
 
$awspub = array (
  "cloudfront", "route53", "route53domainregistration", \
  "import-export", "management-console", "marketplace", \
  "awswaf"
);
 
$awsreg = array (
  "apigateway", "cloudwatch", "dynamodb", "ecr", "ecs", "ec2", \
  "elb", "emr", "elasticache", "glacier","kinesis", "rds", \
  "route53", "sns", "sqs", "s3", "vpc", "autoscaling", \
  "certificatemanager","cloudformation", "cloudtrail", "codedeploy", \
  "directconnect", "elasticbeanstalk", "iam","internetconnectivity", \
  "kms", "lambda", "opsworks", "state", "storagegateway"
);
 
chk_status($awsreg, "reg");
chk_status($awspub, "glb");
 
function chk_status($arrsrv, $div) {
  global $interval;
  global $now;
  global $TOKN;
  global $CWEP;
  global $RMID;
 
  $cntarr=count($arrsrv);
  for ($i=0; $i<$cntarr; $i++) {
    $key=$arrsrv[$i];
    $rssurl="http://status.aws.amazon.com/rss/${key}";
    if ($div=="reg") { $rssurl.="-ap-northeast-1"; }
    $rssurl.=".rss";
    $xml=simplexml_load_string(file_get_contents($rssurl));
    $servicename=$xml->channel->title[0];
    $lastupdated=dateToJST($xml->channel->updated);
 
    echo "Service Name: $servicename\n";
    echo "Last Updated: ".date("Y/m/d H:i:s", $lastupdated)." JST\n";
 
    $cntticket=count($xml->channel->item);
    echo "Count of Feeder's Ticket: $cntticket\n";
    if ($cntticket > 0) {
      for ($j=0; $j<$cntticket; $j++) {
        $ticket['title']=$xml->channel->item[$j]->title;
        $ticket['date']=dateToJST($xml->channel->item[$j]->pubDate);
        $ticket['desc']=$xml->channel->item[$j]->description;
        echo "Ticket Number: $j\n";
        echo "Ticket Title: $ticket[title]\n";
        echo "Ticket Date: ".date("Y/m/d H:i:s", $ticket['date'])." JST\n";
 
        if (($now - $ticket['date']) < $interval) {
          $message ="[info][title]AWSのサービス状況に変更が発生しました。[/title]";
          $message.="◆[".date("Y/m/d H:i:s", $ticket['date'])."] $servicename\n";
          $message.="◆Title : $ticket[title]\n";
          $message.="◆Description\n$ticket[desc]\n";
          $message.="http://status.aws.amazon.com\n";
          $message.="[/info]";
          exec ("/usr/bin/curl -X POST -H \"X-ChatWorkToken: $TOKN\" -d \"body=$message\" \"$CWEP/$RMID/messages\"");
          echo "$message\n";;
          $message="";
        }
      }
    }
  }
}
 
function dateToJST($date) {
  $newdate=DateTime::createFromFormat("D, d M Y H:i:s T", $date);
  $timezone=date_format($newdate, "T");
  if      ($timezone == "PST") { $adjuster="+17 hour"; }
  else if ($timezone == "PDT") { $adjuster="+16 hour"; }
 
  return strtotime($adjuster, strtotime(date_format($newdate, "Y-m-d H:i:s")));
}
?>
  • 途中にはコマンドラインで実行した際のdebug用としてechoで情報を出力するコードも入っている。
  • Intervalは適当に。しかし、cronによる実行間隔とあわせておかないとチェックには漏れが発生するので注意。

댓글

이 블로그의 인기 게시물

curl 명령어 옵션

CISCO 2960s 초기화 후 기본 설정

Macbook M1에서 karabiner를 이용한 영어/한글/일본어 입력 변환