技術周りのあれこれ

主に自分用のメモです。技術的なことや個人的にやってみたことを書いてます。

Azure触って覚えたこと。わかったこと。いろいろ。

はじめに・・・

AWSは触ってるけど、Azureを初めて触ってわかったことを書いてます。
※気になったことがあったら不定期に追記していきます。


ディスクについて

  • VMのドライブ
     標準のWindows ServerのCドライブは128GB、Linuxは30GB
     WindowsServerを容量少ないディスクで作りたいときは、SmallDiskで検索すると出てくるけど、30GBとかなり少ない。
    (起動したこと無いけど、Windowsで30GBって大丈夫なの?)
     ディスクサイズを構築後にPowerShellで増やすことはできるけど、減らすことはできません。

監視について

  • Linuxのディスク容量監視
    Linuxのディスク容量だけはAzureの監視サービス(Azure Monitor)ではメトリクスを取得できません。
     その為、対策としてZabbix等の監視用サーバーをたてて各VMにagentをインストールして利用する方法が挙げられます。

  • アラートのメール通知
    アラートでのメール通知については、SMTPサーバは公式がSendGridを使うようにと勧めているのでSendGridを使いましょう。

ネットワーク周り

  • LoadBalancer利用の際に注意
    LB配下のVMに対するNSGに対して、LBからのIPと監視用Probeを許可しないといけないので要注意です。
    LBからはSourceを168.63.129.16/32、Portはanyで開けて、
    ProbeからはSourceをServiceTag、SourceServiceTagsをAzureLoadBalancerに指定して許可しましょう。

  • ExpressRouteしたら、RouteTables忘れないように!
    ExpressRouteで社内と接続後、何も設定しないとAzureから外への通信は社内からインターネットに抜けようとします。
    プロキシや外と通信したいVMのサブネットにRouteTablesで宛先0.0.0.0/0、ネクストホップはインターネットに設定をしてあげましょう。

  • Azure Backup使うなら80番ポートを開けておくこと
    Azure Bakupを利用するなら80番ポートを許可しておかないとBackupがとれません。
     ※プロキシでHTTPは8080等を使っていても関係なく80番ポートでインターネットに接続できる環境が必要みたい。

  • Windowsライセンス認証は特殊!?
    WindowsServerのサブネットには、ライセンス認証用の経路が必要なんです。
    ExpressRouteがなくてグローバル通信できるなら気にしなくていいのですが、ExpressRoute接続でフォワードプロキシ経由でHTTPしか許可してない環境だとライセンス認証できません。
    RouteTablesの設定で、宛先を23.102.135.246/32でネクストホップをインターネットに設定してWindowsServerのあるサブネットにアタッチします。
    23.102.135.246/32がMicrosoftがKMSを行ってるIPだそうです。
    これ知らなかったらWindowsServer使えなくなってたね・・・(;^ω^)

以上!
またなんかわかりましたら書いていきます。

SQL全然できない僕に教えてくれたこと①

はじめに
社内でDB勉強会が開かれたので参加して学んだことを書きます。
今回はPostgreSQLです。


  • t_answerテーブルのinsert_datetimeカラムに年月日時間が入っている。
      年月毎の件数を出したい。
SELECT to_char(insert_datetime,'YYYY/mm'),count(*) 
    FROM t_answer  
    GROUP BY to_char(insert_datetime, 'YYYY/mm');  

to_charという関数を使って日付変換できます。
ちなみにMySQLではdate_format関数を使う。to_charは使えないので注意。


  • 上記のデータをt_userテーブルのgender毎に分けて集計したい。
SELECT to_char(t_answer.insert_datetime,'YYYY/mm'),t_user.gender,count(*) 
    FROM t_answer  
    JOIN t_user ON t_user.id=t_answer.user_id  
    GROUP BY to_char(t_answer.insert_datetime, 'YYYY/mm'),t_user.gender;  

JOINでテーブルくっつけます。


  • t_answerテーブルにあるcorrectの値がt:正解、f:不正解とし、得点が上位10名のユーザーを表示したい。
SELECT user_id,challenge_id,count(*)
    FROM t_answer  
    WHERE correct='t'   
    GROUP BY user_id,challenge_id  
    ORDER BY count(*) DESC LIMIT 10;  

DESCで降順にして、LIMITで件数を絞ります。


  • ユーザ毎の平均点数上位10名を表示したい。
SELECT user_id, avg(count)  
FROM (  
    SELECT user_id,challenge_id,count(*)
    FROM t_answer  
    WHERE correct='t'   
    GROUP BY user_id,challenge_id  
    ORDER BY count(*) DESC) AS nyan  
GROUP BY user_id  
ORDER BY avg DESC LIMIT 10;  

平均を出すにはavg関数を使う。
上の問題結果から表示するのでfrom内でselectして、ASで別名を付けておきます。 いわゆるサブクエリってやつらしいです。
※AS nyan = あずにゃん(ry


  • t_groupにいるユーザ人数のランキング表示したい。
select RANK() over(ORDER BY count(user_id) DESC),t_group.name,count(user_id)  
    from t_group  
    JOIN r_group_member on t_group.id=r_group_member.group_id  
    GROUP BY r_group_member.group_id,t_group.name  
    ORDER BY count(r_group_member.user_id) DESC;  

ランキングはRANK関数を使います。


  • 重複するユーザーは除いた年月毎の集計を出したい。
SELECT to_char(insert_datetime,'YYYY/mm'),count(DISTINCT user_id)   
FROM t_answer  
GROUP BY to_char(insert_datetime, 'YYYY/mm') LIMIT 10;  

重複する値を除くときは、DISTINCTを入れます。


  • ユーザ情報で
    gender 1:男性
    gender 2:女性
    として100件表示したい。
SELECT id,name,  
CASE WHEN gender=1 THEN 'male'  
     WHEN gender=2 THEN 'female'  
ELSE 'other'  
END as nyan  
FROM t_user  
ORDER BY "id" LIMIT 100;    

値を条件付きで表示したい場合はcase文を使います。


  • t_userのidが偶数か奇数かを表示する。
SELECT id,name,
CASE WHEN MOD(id,2)=0 THEN '偶数'  
     WHEN MOD(id,2)=1 THEN '奇数'  
ELSE 'other'  
END as nyan  
FROM t_user  
ORDER BY "id"  
LIMIT 100;  

MOD関数で余剰計算して判定します。

また次回あるそうなので、続くかな。

GCPの各サービスについて ※2016/12/17時点

先日GoogleCloudPlatform(以降GCP)トレーニングツアーに参加してきました。
トップゲートの小林明大さんがGCPの機能やサービスについて解説してくださったので、
簡単にまとめていきます。

GCPを操作するユーザについて


以下の4つがあり、GoogleはOwnerを最低2人に付与することを推奨しているらしい。
* Owner
* Editor
* Viewer
* Billing adminisitrator

API Manager


各サービスのAPIを許可するかどうかを設定できます。
デフォルトで有効になっているものもありますが、無効になっているものもあるので 必要なときは有効にしてあげましょう。

Google APIs Explorer


https://developers.google.com/apis-explorer/#p/

ブラウザでAPIを選択し、値を入れたら使えるというAPI操作をブラウザで設定できます。

Google Cloud Shell


一番上のバーの右側のアイコンから使用できます。
例えば、GoogleComputeEngineを使用する際に、SSHで接続しなくてもその画面でコマンドを実行できます。

AppEngine


  • Standard Environment
    Googleが指定した言語で、Googleが用意したコンテナの中で実行します。
    負荷が上がればオートスケーリングしてくれます。
    作成したバージョンごとにリクエストの割合に応じてリリースすることもできます。
    (例: リクエストの30%は開発版、70%は最新安定版のような使い方が可能)

  • Flexible Environment
    言語の制約がありません
    ミドルウェアの操作がしたい時に使用します。
    こちらもコンテナで動いてます。
    1VM 1コンテナで動いているため、スケールアウトの動作はStandard Enviaronmentよりは遅いです。

Endpoints


APIを自動生成してくれるツールです。
APIを構築する時、トラブル発生時の問題の切り分けも分かりやすいです。

Datastore


AppEngineのDBを外出ししたサービスです。
NoSQLでKey-Value型です。

Strage


ObjectStrageです。 AWSのS3と同じです。
CloudStorageFuseというツールを使ってマウントも可能です。
バケットはリージョン毎でもマルチリージョンでも利用可能です。
Cloud Storage Transfer Serviceを使ってAWSのS3から転送することも可能です。
一度バケットを作成してしまうとプランを変更できないので、プランを変更したいときに既存のデータを別のプランのバケットへ転送する際にも使えます。
オフライン メディアのインポートとエクスポートもありますが、利用できるサービスプロバイダがかなり限られています。

Bigtable


NoSQLです。
get, putはめちゃ早いです。
HBaseとの互換性があります。
HadoopでHbase使ってたら移行しやすいらしい。
GmailとかGoogleAnalyticsの裏側で使われてるそうです。

SQL


MySQLGCPで使うサービスです。

Container Engine


KubernetesっていうDockerコンテナのオーケストレーションツールを使ってコンテナを管理する仕組みになってます。
Borgっていうクラスタマネージャから作ったそうです。

Compute Engine


メンテナンス時はGoogleの人が勝手に他のサーバに移動してくれて、ユーザは何も気せず利用できます。 勝手に停止していた場合は、自動的に起動してくれます。 分単位の課金で1度起動すると最低10分は費用が発生します。

継続利用割引というものがあり、 同じマシンタイプを使い続けると最大30%お得になります。

料金周りについてはこちら
https://cloud.google.com/compute/pricing

インスタンス作成時に可用性ポリシーからプリエンプティブを選択すると、 24時間以内に必ずシャットダウンする仕様のインスタンスが作成されます。 その代わりかなり安く利用できます。

Cloud Interconnect


GCPとデータセンター等のオンプレサーバーとを接続する時に使用します。

Cloud CDN


Googleのエッジポイントを使用して、HTTPのコンテンツをキャッシュすることで、高速にコンテンツを配信できるよになります。

Stackdriver


監視ツールです。
AWSの監視もできます。
Agentを入れれば、詳細を見ることもできます。
Debuggerを使ってクラウド上でデバッグもできます。

Deployment Manager


yamlで書く構成管理ツールです。
AWSでいうCloudFormationです。

Source Repositories


非公開のGitホスティングサービスです。
Stackdriverと一緒に使ってソースをデバッグすることもできます。

Funtions


javascriptで書くサーバレスなサービスです。
AWSでいうLambdaと同じです。

BigQuery


膨大なデータに対してクエリを投げて短時間でレスポンスが返ってくるというビッグデータ解析サービスです。
AWSのRedshiftに近いけど、運用作業がほとんど必要ないのが特徴です。

Pub/Sub


非同期メッセージングサービス
アプリケーション間でメッセージ送受信を行います。

Dataflow


プログラミングモデルのマネージドサービス
JavaPythonで書けます。
必要なインスタンスは勝手にスケールしてくれるので、運用が楽ちんです。
使い終わったらインスタンスをシャットダウンしてくれるので無駄な費用がかかりません。

Dataproc


Hadoopクラスタをプロビジョニングするサービス。
Hadoopのオートスケールはしてくれませんので注意が必要です。
使い終わったら自分でインスタンスをシャットダウンしないといけません。

Datalab


データを分析してグラフ化したりするツールです。
Jupyterという、プログラムを実行して結果を記録しながらデータの分析作業を行うツールを使って作られたサービスです。

Machine Learning Platorm


Tensorflowを使って得たアルゴリズムを使ったサービスです。

★おまけ

Googleが提供してるAPIの中には、以下のようなMachineLearningから作られたAPIがあります。

  1. Vision API
    画像判定してくれるAPIです。

  2. Speech API
    しゃべったデータを文字に変換してくれるAPIです。

  3. Tranlate API
    翻訳サービスのAPIです。

以上です。

Googleのサービスは世界中のたくさんの人が使っていて、各サービスの裏側で動いてるものをGCPとして使えるので信頼性はかなり高いと思います。 今のところAWSの方が知名度が高く、導入事例も多い気がしますが、GCPで構築できるならコスト次第ではありだと思いました。

2016/12/01 AWS re:Invent リリース まとめ

11/30に続いて12/01にもAmazonが新機能サービスをリリースしたので、簡単にご紹介します。
※11/30分のリリースについては、前回書いたのでご確認くださいませ

  1. AWS CodeBuild
    文字通りAWSでビルドができるよ。
    隔離されたコンテナベースの環境で実行。
    これでローカルでビルドして本番環境でビルドしたら動かないなんてことが回避できますね。

  2. VPCでのEC2インスタンスIPv6対応
    S3、CloudFront、WAF、Route53に続いて、VPCとEC2インスタンスIPv6対応。

  3. AWS Shield
    DDoS攻撃からアプリケーションを保護。
    ELB、CloudFront、Route53と連携して動作。
    AWS WAFから利用できます。

  4. AWS Step Functions
    ビジュアルワークフローを使って、ビジュアライズなワークフローを使用して、分散アプリケーションとMicroservicesのコンポーネントを簡単にコーディネートできるサービス。
    イメージしにくいですが、Lambdaなどの各ファンクションを状態として、状態遷移図をお絵かきしてファンクションの実行順序や条件を制御できるそうです。

  5. Amazon Pinpoint
    Push通知サービス。

  6. AWS Batch
    バッチ処理をフルマネージドで提供するサービス
    ジョブのコードはRubyPython、Node、またはBashスクリプトで可能。

  7. AWS Personal Health Dashboard
    ダッシュボードの右上のアカウントの左側にアラートアイコンが増えてる!?
    利用してるサービスの状態に変化が会った際にはアラートを自動的に表示してくれるようになりました。

  8. Blox
    ECSのためのオープンソーススケジューラ
    イベントストリームを処理してクラスタの状態を追跡し、状態をREST APIで利用可能にするサービス

  9. AWS X-Ray
    アプリケーションモニタリング
    EC2、ECS、ElasticBeanstalk、Lambdaでデーモンを起動します。
    表示されてた画面はSFっぽくてかっこいい!

  10. Amazon EC2 Systems Manager
    新しいEC2やオンプレミスサーバを管理するサービス
    コマンド実行、状態マネージャ、インベントリ、メンテナンスウィンドウ、パッチマネージャ、オートメーション、パラメータストアがあるそうです。
    EC2の画面の一番下に追加されてるー

  11. AWS Lambda に C# が追加
    ただそれだけなんですけどね・・・

  12. AWS OpsWorks For Chef Automate
    Chefサーバを簡単に作成します。
    EC2が展開され、自動でChef Serverがインストールされるみたいです。

  13. AWS Lambda@Edge
    Lambda関数をCloudFrontのイベント発生時に起動させることが可能に。

  14. AWS Glue
    S3、RDS、Redshiftと統合して、データを抽出し、加工し、データベースに書き出すサービス(ETLサービス)です。
    ETLジョブをスケジュールして実行します。

イベントの現場では発表時どんな反応だったのか見たかったなぁ・・・

2016/11/30 AWS re:Invent リリース まとめ

Amazonが11/30のAWS re:Inventカンファレンスでめっちゃリリースがありました。
簡単にまとめていきます。

  1. Amazon Anthena
    S3に保存してるデータを標準SQLで分析できるサービス。 サーバレスアーキテクチャ
    管理コンソールを使うかJDBC接続で利用可能。

  2. Amazon EC2 Elastic GPUs
    既存のインスタンスタイプにGPUを追加できる!
    既存でもG2、P2インスタンスGPUを利用できましたが、フレキシブルにグラフィック性能を決めれます。

  3. F1インスタンスの追加
    FPGAを使えるそうです。
    いまいちわかってないですが、自分で論理回路を変更できることっぽい?

  4. インスタンスタイプ色々
    特に目に止まったのだけ挙げると
    R4インスタンスでネットワーク帯域10Gbpsと20Gbpsをサポート!

  5. AWS Snowmobile
    エクサバイト級のデータを持ってるユーザからすると、AWS Snowballだけじゃデータ移行するのに時間がかかるということで、 最大100PBのデータ移行を複数台で可能に。

  6. AWS Snowball Edge
    Snowballの拡張版。100TBのストレージ。
    クラスタリング可能。S3とNFSをストレージエンドポイントに設定可能。
    LambdaファンクションでS3バケットに対してアップロードされたデータを処理可能。

  7. Amazon Lightsail
    AWSVPSです。
    月額$5からの定額料金です。

  8. AuroraでPostgreSQL互換対応
    AuroraでPostgreSQLに対応しました!

  9. Amazon Rekognition
    ディープラーニングを使った強力な画像分析を可能にしたサービス

  10. AWS Greengrass
    バイスに組み込んで製造し、AWS IoTとLambda上で実行されるサービス。
    IoTなどのデバイスのローカル上で処理させたいときに使うっぽい。

  11. Amazon Polly
    テキスト読み上げサービス。
    24の言語と47の音声が含まれている。
    オーディオファイルとして保存も可。

  12. Amazon Lex
    対話的音声&テキストインターフェース
    簡単にいうと音声チャットbot
    現在はFacebook Messengerと接続できる。
    SlackとTwilloは現在作業中とのこと。

  13. AWS Organizations
    AWSアカウントを複数使用している場合に、管理を簡単にできるサービス。
    現場では、開発用と本番用とでアカウントを分けて使用する場面があるので、そういう場合に便利。
    料金の一括請求とかもできます。

以上です。
不足してる情報もあるかと思いますが、気になる方は調べてみてください。

Bash on Windowsでエラー音がうるさい

Bash on Windowsで開発やるぞ!
と触ってたらエラー音が気になってしょうがなくなったので、この音だけを消す方法をまとめます。

vi ~/.inputrc

set bell-style none

上記を記述して保存して、Bashを再度立ち上げたら音が消えた!

これで静かに作業ができるー
ε-(´∀`*)ホッ

参考サイト様

d.hatena.ne.jp

RDSのスナップショット一覧を100個以上取得する(LambdaのPython編)

RDSスナップショットを取得するのに、
describe_db_snapshots()
をすると100個までしかデフォルトでは取得できません。

もし手動でスナップショットを取得して100個以上になった場合は、
describe_db_snapshots()
をする際に"Marker"という値が発行されるので、そいつを引数として渡してやる必要があります。

今回はLambdaを使って発動するように作ります。
言語はPythonです。

※取得部分だけ記載します。

# 100個の生データを取得します。  
rds = boto3.client('rds')  
row_snps = rds.describe_db_snapshots()  
  
# スナップショット一覧のみ取り出します。  
snapshots = row_snps['DBSnapshots']  
  
# 生データを取得した項目にMarkerのキーがあれば、取得し続けるように回します。  
while "Marker" in row_snps:  
  
    # Markerの値を保存します。   
    mark = row_snps['Marker']

    # Markerの値を使って次の100個の生データ一覧を取得します。
    row_snps = rds.describe_db_snapshots(Marker=mark)

    # 初回のスナップショット一覧に今回取得したスナップショットのデータを結合します。
    snapshots = snapshots + row_snps['DBSnapshots']

これでsnapshotsに100個以上全てのスナップショット一覧が格納されます。