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
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
プログラミングモデルのマネージドサービス
JavaとPythonで書けます。
必要なインスタンスは勝手にスケールしてくれるので、運用が楽ちんです。
使い終わったらインスタンスをシャットダウンしてくれるので無駄な費用がかかりません。
Dataproc
Hadoopクラスタをプロビジョニングするサービス。
Hadoopのオートスケールはしてくれませんので注意が必要です。
使い終わったら自分でインスタンスをシャットダウンしないといけません。
Datalab
データを分析してグラフ化したりするツールです。
Jupyterという、プログラムを実行して結果を記録しながらデータの分析作業を行うツールを使って作られたサービスです。
Machine Learning Platorm
Tensorflowを使って得たアルゴリズムを使ったサービスです。
★おまけ
Googleが提供してるAPIの中には、以下のようなMachineLearningから作られたAPIがあります。
以上です。
Googleのサービスは世界中のたくさんの人が使っていて、各サービスの裏側で動いてるものをGCPとして使えるので信頼性はかなり高いと思います。 今のところAWSの方が知名度が高く、導入事例も多い気がしますが、GCPで構築できるならコスト次第ではありだと思いました。
2016/12/01 AWS re:Invent リリース まとめ
11/30に続いて12/01にもAmazonが新機能サービスをリリースしたので、簡単にご紹介します。
※11/30分のリリースについては、前回書いたのでご確認くださいませ
AWS CodeBuild
文字通りAWSでビルドができるよ。
隔離されたコンテナベースの環境で実行。
これでローカルでビルドして本番環境でビルドしたら動かないなんてことが回避できますね。VPCでのEC2インスタンスのIPv6対応
S3、CloudFront、WAF、Route53に続いて、VPCとEC2インスタンスもIPv6対応。AWS Shield
DDoS攻撃からアプリケーションを保護。
ELB、CloudFront、Route53と連携して動作。
AWS WAFから利用できます。AWS Step Functions
ビジュアルワークフローを使って、ビジュアライズなワークフローを使用して、分散アプリケーションとMicroservicesのコンポーネントを簡単にコーディネートできるサービス。
イメージしにくいですが、Lambdaなどの各ファンクションを状態として、状態遷移図をお絵かきしてファンクションの実行順序や条件を制御できるそうです。Amazon Pinpoint
Push通知サービス。AWS Batch
バッチ処理をフルマネージドで提供するサービス
ジョブのコードはRuby、Python、Node、またはBashスクリプトで可能。AWS Personal Health Dashboard
ダッシュボードの右上のアカウントの左側にアラートアイコンが増えてる!?
利用してるサービスの状態に変化が会った際にはアラートを自動的に表示してくれるようになりました。Blox
ECSのためのオープンソーススケジューラ
イベントストリームを処理してクラスタの状態を追跡し、状態をREST APIで利用可能にするサービスAWS X-Ray
アプリケーションモニタリング
EC2、ECS、ElasticBeanstalk、Lambdaでデーモンを起動します。
表示されてた画面はSFっぽくてかっこいい!Amazon EC2 Systems Manager
新しいEC2やオンプレミスサーバを管理するサービス
コマンド実行、状態マネージャ、インベントリ、メンテナンスウィンドウ、パッチマネージャ、オートメーション、パラメータストアがあるそうです。
EC2の画面の一番下に追加されてるーAWS OpsWorks For Chef Automate
Chefサーバを簡単に作成します。
EC2が展開され、自動でChef Serverがインストールされるみたいです。AWS Lambda@Edge
Lambda関数をCloudFrontのイベント発生時に起動させることが可能に。AWS Glue
S3、RDS、Redshiftと統合して、データを抽出し、加工し、データベースに書き出すサービス(ETLサービス)です。
ETLジョブをスケジュールして実行します。
イベントの現場では発表時どんな反応だったのか見たかったなぁ・・・
2016/11/30 AWS re:Invent リリース まとめ
Amazonが11/30のAWS re:Inventカンファレンスでめっちゃリリースがありました。
簡単にまとめていきます。
Amazon Anthena
S3に保存してるデータを標準SQLで分析できるサービス。 サーバレスアーキテクチャ。
管理コンソールを使うかJDBC接続で利用可能。Amazon EC2 Elastic GPUs
既存のインスタンスタイプにGPUを追加できる!
既存でもG2、P2インスタンスでGPUを利用できましたが、フレキシブルにグラフィック性能を決めれます。インスタンスタイプ色々
特に目に止まったのだけ挙げると
R4インスタンスでネットワーク帯域10Gbpsと20Gbpsをサポート!AWS Snowmobile
エクサバイト級のデータを持ってるユーザからすると、AWS Snowballだけじゃデータ移行するのに時間がかかるということで、 最大100PBのデータ移行を複数台で可能に。AWS Snowball Edge
Snowballの拡張版。100TBのストレージ。
クラスタリング可能。S3とNFSをストレージエンドポイントに設定可能。
LambdaファンクションでS3バケットに対してアップロードされたデータを処理可能。AuroraでPostgreSQL互換対応
AuroraでPostgreSQLに対応しました!AWS Greengrass
デバイスに組み込んで製造し、AWS IoTとLambda上で実行されるサービス。
IoTなどのデバイスのローカル上で処理させたいときに使うっぽい。Amazon Polly
テキスト読み上げサービス。
24の言語と47の音声が含まれている。
オーディオファイルとして保存も可。Amazon Lex
対話的音声&テキストインターフェース
簡単にいうと音声チャットbot。
現在はFacebook Messengerと接続できる。
SlackとTwilloは現在作業中とのこと。AWS Organizations
AWSアカウントを複数使用している場合に、管理を簡単にできるサービス。
現場では、開発用と本番用とでアカウントを分けて使用する場面があるので、そういう場合に便利。
料金の一括請求とかもできます。
以上です。
不足してる情報もあるかと思いますが、気になる方は調べてみてください。
Bash on Windowsでエラー音がうるさい
[2018/03/10]追記
全然足りてなかった・・・
下記をログインユーザーとrootユーザーで実行したら治りました。
echo "set bell-style none" >> ~/.inputrc
echo "set visualbell t_vb=" >> ~/.vimrc
参考サイト様
https://linuxfan.info/bow-stop-beep
Bash on Windowsで開発やるぞ!
と触ってたらエラー音が気になってしょうがなくなったので、この音だけを消す方法をまとめます。
vi ~/.inputrc
set bell-style none
上記を記述して保存して、Bashを再度立ち上げたら音が消えた!
これで静かに作業ができるー
ε-(´∀`*)ホッ
参考サイト様
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個以上全てのスナップショット一覧が格納されます。