CentOS7 で再起動後に vm.swappiness の設定が元に戻ってしまう
環境
CentOS 7 (x86_64) - with Updates HVM on AWS Marketplace
事象
- デフォルトは
vm.swappiness = 30
sysctl -w vm.swappiness=任意の値
すると任意の値に変更可能sysctl -p
するも reboot 後に元に戻ってしまう
原因
こちらで言及されていました。
CentOs7 vm.swappiness cannot be set on boot - CentOS
tuned によって上書きされるようです。
対応
tuned の設定ファイルは /usr/lib/tuned 配下にあるそうですので grep してみます。
# find /usr/lib/tuned -name '*.conf' -type f -exec grep "vm.swappiness" {} \+ /usr/lib/tuned/latency-performance/tuned.conf:vm.swappiness=10 /usr/lib/tuned/throughput-performance/tuned.conf:vm.swappiness=10 /usr/lib/tuned/virtual-guest/tuned.conf:vm.swappiness = 30
デフォルトでは 30 に設定されていましたので、 /usr/lib/tuned/virtual-guest/tuned.conf
の値を変更したところ、意図した通りに設定されました。
一応、編集したファイルを下記に記載します。
# # tuned configuration # [main] include=throughput-performance [sysctl] # If a workload mostly uses anonymous memory and it hits this limit, the entire # working set is buffered for I/O, and any more write buffering would require # swapping, so it's time to throttle writes until I/O can catch up. Workloads # that mostly use file mappings may be able to use even higher values. # # The generator of dirty data starts writeback at this percentage (system default # is 20%) vm.dirty_ratio = 30 # Filesystem I/O is usually much more efficient than swapping, so try to keep # swapping low. It's usually safe to go even lower than this on systems with # server-grade storage. - vm.swappiness = 30 + vm.swappiness = 5
python でディレクトリ配下の最新のファイル名(フルパス)を取得する
前提
最新かどうかはファイルの最終変更日時 = mtime で判定します。
準備
こんな感じでファイルを作成します
$ for ((i=0;i>10;i++)); do touch $i.txt; sleep 5; done
最終変更日は以下の様になりました。
9.txt の最終変更日時が最も新しいものになっています。
$ stat -f "%N %m" *.txt 0.txt 1465450197 1.txt 1465450202 2.txt 1465450207 3.txt 1465450212 4.txt 1465450217 5.txt 1465450222 6.txt 1465450227 7.txt 1465450232 8.txt 1465450237 9.txt 1465450242
表題のことをする
import os from glob import glob def get_latest_modified_file_path(dirname): target = os.path.join(dirname, '*') files = [(f, os.path.getmtime(f)) for f in glob(target)] latest_modified_file_path = sorted(files, key=lambda files: files[1])[-1] return latest_modified_file_path[0] if __name__ == '__main__': dirname = "/hoge" print(get_latest_modified_file_path(dirname))
実行するとフルパスが取得できます。
$ python get_latest_modified_file_path.py /hoge/9.txt
vagrant で windows server 2012R2 を動かす
- vagrant-winrm プラグインのインストール
- windows server の vagrant box を make する
- packer のダウンロード
- vagrant box add
- Vagrantfile
test-kitchen の中の人が手順を公開しています。
基本的に手順の内容に沿えばいいのですが感動したので備忘として。
なお、環境は ubuntu-mate 16.04 で、 ruby 2.3.0p0 です。
vagrant-winrm プラグインのインストール
$ vagrant plugin install vagrant-winrm
windows server の vagrant box を make する
~/vagrant
配下で作業します。
$ cd ~/vagrant $ git clone https://github.com/boxcutter/windows.git $ cd windows $ make virtualbox/eval-win2012r2-standard rm -rf output-virtualbox-iso mkdir -p box/virtualbox packer build -only=virtualbox-iso -var 'cm=nocm' -var 'version=1.0.4' -var 'update=false' -var 'headless=false' -var "shutdown_command=shutdown /s /t 10 /f /d p:4:1 /c Packer_Shutdown" -var "iso_url=http://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.16384.WINBLUE_RTM.130821-1623_X64FRE_SERVER_EVAL_EN-US-IRM_SSS_X64FREE_EN-US_DV5.ISO" -var "iso_checksum=7e3f89dbff163e259ca9b0d1f078daafd2fed513" eval-win2012r2-standard.json /bin/sh: 1: packer: not found Makefile:428: ターゲット 'box/virtualbox/eval-win2012r2-standard-nocm-1.0.4.box' のレシピで失敗しました make: *** [box/virtualbox/eval-win2012r2-standard-nocm-1.0.4.box] エラー 127
と、 packer がないと怒られました。
packer は hashicorp 社が提供するオープンソースのツールで、
ゴールデンイメージを作ったり vagrant box を作成したりするものです。
使ってみたいと思っていたのでタイムリー^^
というわけで packer をインストールします。
packer のダウンロード
公式からダウンロードして解凍し、パスの通ったところにバイナリを移動します。
/usr/local/src$ sudo wget https://releases.hashicorp.com/packer/0.10.1/packer_0.10.1_linux_amd64.zip /usr/local/src$ unzip packer_0.10.1_linux_amd64.zip packer packer_0.10.1_linux_amd64.zip /usr/local/src$ sudo cp packer /usr/local/sbin /usr/local/src$ packer --version 0.10.1
もう一回 make
ここからの vmware 関連のパッケージをごにょごにょしていますが、たぶん不要です
私の無駄っぽい苦労ログに興味のある方以外は ### 再再再再再 make まで飛ばしてください
$ make rm -rf output-vmware-iso mkdir -p box/vmware packer build -only=vmware-iso -var 'cm=nocm' -var 'version=1.0.4' -var 'update=false' -var 'headless=false' -var "shutdown_command=shutdown /s /t 10 /f /d p:4:1 /c Packer_Shutdown" -var "iso_url=iso/en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" -var "iso_checksum=7e7e9425041b3328ccf723a0855c2bc4f462ec57" win2008r2-datacenter-cygwin.json vmware-iso output will be in this color. Build 'vmware-iso' errored: Failed creating VMware driver: Unable to initialize any driver for this platform. The errors from each driver are shown below. Please fix at least one driver to continue: * exec: "vmware": executable file not found in $PATH * exec: "vmware": executable file not found in $PATH * exec: "vmplayer": executable file not found in $PATH * exec: "vmplayer": executable file not found in $PATH ==> Some builds didn't complete successfully and had errors: --> vmware-iso: Failed creating VMware driver: Unable to initialize any driver for this platform. The errors from each driver are shown below. Please fix at least one driver to continue: * exec: "vmware": executable file not found in $PATH * exec: "vmware": executable file not found in $PATH * exec: "vmplayer": executable file not found in $PATH * exec: "vmplayer": executable file not found in $PATH ==> Builds finished but no artifacts were created. Makefile:406: ターゲット 'box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box' のレシピで失敗しました make: *** [box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box] エラー 1 rriifftt@X1:~/vagrant/windows$ sudo apt install vmrun パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 E: パッケージ vmrun が見つかりません
今度は vmrun がないと怒られます。。
http://askubuntu.com/questions/458198/xubuntu-vmware-player-missing-vmrun-utility によると、VIX SDK をインストールする必要がありそうです。
VIX SDK のインストール
公式から普通にダウンロードしてみます。
.bundle
ファイルってなんだ。。。
VMware を Ubuntu にインストールする - わかったつもりになるページ によると普通に実行すればよさそうです。
一旦実行してみます。
~/Downloads$ ls VMware-VIX-1.13.2-1744117.x86_64.bundle VMware-VIX-1.13.2-1744117.x86_64.bundle ~/Downloads$ chmod +x VMware-VIX-1.13.2-1744117.x86_64.bundle ~/Downloads$ sudo sh VMware-VIX-1.13.2-1744117.x86_64.bundle Extracting VMware Installer...done.
するとウィザードが開きます。
accept して next
インストール完了です。
再々 make
するも同じエラーで進まず。。。
vmware workstation player のインストール
次は無償で利用できる vmware workstation player をインストールを試してみます。
こちらも .bundle
なので、同様に sh から実行してみます。
ウィザードでいろいろ聞かれますが、Lisence Key は空欄にして普通にインストールします。
再再再 make
ちょっとエラーが変わった。
$ make rm -rf output-vmware-iso mkdir -p box/vmware packer build -only=vmware-iso -var 'cm=nocm' -var 'version=1.0.4' -var 'update=false' -var 'headless=false' -var "shutdown_command=shutdown /s /t 10 /f /d p:4:1 /c Packer_Shutdown" -var "iso_url=iso/en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" -var "iso_checksum=7e7e9425041b3328ccf723a0855c2bc4f462ec57" win2008r2-datacenter-cygwin.json vmware-iso output will be in this color. Build 'vmware-iso' errored: Failed creating VMware driver: Unable to initialize any driver for this platform. The errors from each driver are shown below. Please fix at least one driver to continue: * exec: "vmware": executable file not found in $PATH * exec: "vmware": executable file not found in $PATH * Neither 'vmware-vdiskmanager', nor 'qemu-img' found in path. One of these is required to configure disks for VMware Player. * Neither 'vmware-vdiskmanager', nor 'qemu-img' found in path. One of these is required to configure disks for VMware Player. ==> Some builds didn't complete successfully and had errors: --> vmware-iso: Failed creating VMware driver: Unable to initialize any driver for this platform. The errors from each driver are shown below. Please fix at least one driver to continue: * exec: "vmware": executable file not found in $PATH * exec: "vmware": executable file not found in $PATH * Neither 'vmware-vdiskmanager', nor 'qemu-img' found in path. One of these is required to configure disks for VMware Player. * Neither 'vmware-vdiskmanager', nor 'qemu-img' found in path. One of these is required to configure disks for VMware Player. ==> Builds finished but no artifacts were created. Makefile:406: ターゲット 'box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box' のレシピで失敗しました make: *** [box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box] エラー 1
qemu が足りないっぽい。
$ sudo apt install qemu $ make rm -rf output-vmware-iso mkdir -p box/vmware packer build -only=vmware-iso -var 'cm=nocm' -var 'version=1.0.4' -var 'update=false' -var 'headless=false' -var "shutdown_command=shutdown /s /t 10 /f /d p:4:1 /c Packer_Shutdown" -var "iso_url=iso/en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" -var "iso_checksum=7e7e9425041b3328ccf723a0855c2bc4f462ec57" win2008r2-datacenter-cygwin.json vmware-iso output will be in this color. Build 'vmware-iso' errored: Couldn't find VMware tools for 'windows'! VMware often downloads these tools on-demand. However, to do this, you need to create a fake VM of the proper type then click the 'install tools' option in the VMware GUI. ==> Some builds didn't complete successfully and had errors: --> vmware-iso: Couldn't find VMware tools for 'windows'! VMware often downloads these tools on-demand. However, to do this, you need to create a fake VM of the proper type then click the 'install tools' option in the VMware GUI. ==> Builds finished but no artifacts were created. Makefile:406: ターゲット 'box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box' のレシピで失敗しました make: *** [box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box] エラー 1
今度は VMware tools for windows か。。
VMware tools for windows
vmware workstation player の player preference からインストールできそうです。
いろいろとインストールされました。
再再再再 make
またエラーが変わりました。
$ make rm -rf output-vmware-iso mkdir -p box/vmware packer build -only=vmware-iso -var 'cm=nocm' -var 'version=1.0.4' -var 'update=false' -var 'headless=false' -var "shutdown_command=shutdown /s /t 10 /f /d p:4:1 /c Packer_Shutdown" -var "iso_url=iso/en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" -var "iso_checksum=7e7e9425041b3328ccf723a0855c2bc4f462ec57" win2008r2-datacenter-cygwin.json vmware-iso output will be in this color. ==> vmware-iso: Downloading or copying ISO vmware-iso: Downloading or copying: file:///iso/en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso vmware-iso: Error downloading: open /iso/en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso: no such file or directory ==> vmware-iso: ISO download failed. Build 'vmware-iso' errored: ISO download failed. ==> Some builds didn't complete successfully and had errors: --> vmware-iso: ISO download failed. ==> Builds finished but no artifacts were created. Makefile:406: ターゲット 'box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box' のレシピで失敗しました make: *** [box/vmware/win2008r2-datacenter-cygwin-nocm-1.0.4.box] エラー 1
あかん。挫けそう。
と、思ったら make 対象を指定していないことに気づきました。
もしかして vmware とか不要だった・・・?
再再再再再 make
$ make virtualbox/eval-win2012r2-standard rm -rf output-virtualbox-iso mkdir -p box/virtualbox packer build -only=virtualbox-iso -var 'cm=nocm' -var 'version=1.0.4' -var 'update=false' -var 'headless=false' -var "shutdown_command=shutdown /s /t 10 /f /d p:4:1 /c Packer_Shutdown" -var "iso_url=http://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.16384.WINBLUE_RTM.130821-1623_X64FRE_SERVER_EVAL_EN-US-IRM_SSS_X64FREE_EN-US_DV5.ISO" -var "iso_checksum=7e3f89dbff163e259ca9b0d1f078daafd2fed513" eval-win2012r2-standard.json virtualbox-iso output will be in this color. ==> virtualbox-iso: Cannot find "Default Guest Additions ISO" in vboxmanage output (or it is empty) ==> virtualbox-iso: Downloading or copying Guest additions checksums virtualbox-iso: Downloading or copying: http://download.virtualbox.org/virtualbox/5.0.18/SHA256SUMS ==> virtualbox-iso: Downloading or copying Guest additions virtualbox-iso: Downloading or copying: http://download.virtualbox.org/virtualbox/5.0.18/VBoxGuestAdditions_5.0.18.iso virtualbox-iso: Download progress: 62% virtualbox-iso: Download progress: 94% ==> virtualbox-iso: Downloading or copying ISO virtualbox-iso: Downloading or copying: http://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.16384.WINBLUE_RTM.130821-1623_X64FRE_SERVER_EVAL_EN-US-IRM_SSS_X64FREE_EN-US_DV5.ISO virtualbox-iso: Download progress: 0% virtualbox-iso: Download progress: 1% virtualbox-iso: Download progress: 2% virtualbox-iso: Download progress: 3%
進み始めました。 44min ほどかかるそうなのでしばし芋焼酎など飲みながら待ちます。
こいつ。。動くぞ。。。
終わった模様です。
==> virtualbox-iso: Gracefully halting virtual machine... virtualbox-iso: Removing floppy drive... ==> virtualbox-iso: Preparing to export machine... virtualbox-iso: Deleting forwarded port mapping for the communicator (SSH, WinRM, etc) (host port 3171) ==> virtualbox-iso: Exporting virtual machine... virtualbox-iso: Executing: export eval-win2012r2-standard --output output-virtualbox-iso/eval-win2012r2-standard.ovf ==> virtualbox-iso: Unregistering and deleting virtual machine... ==> virtualbox-iso: Running post-processor: vagrant ==> virtualbox-iso (vagrant): Creating Vagrant box for 'virtualbox' provider virtualbox-iso (vagrant): Copying from artifact: output-virtualbox-iso/eval-win2012r2-standard-disk1.vmdk virtualbox-iso (vagrant): Copying from artifact: output-virtualbox-iso/eval-win2012r2-standard.ovf virtualbox-iso (vagrant): Renaming the OVF to box.ovf... virtualbox-iso (vagrant): Using custom Vagrantfile: tpl/vagrantfile-eval-win2012r2-standard.tpl virtualbox-iso (vagrant): Compressing: Vagrantfile virtualbox-iso (vagrant): Compressing: box.ovf virtualbox-iso (vagrant): Compressing: eval-win2012r2-standard-disk1.vmdk virtualbox-iso (vagrant): Compressing: metadata.json Build 'virtualbox-iso' finished. ==> Builds finished. The artifacts of successful builds are: --> virtualbox-iso: 'virtualbox' provider box: box/virtualbox/eval-win2012r2-standard-nocm-1.0.4.
vagrant box add
手順に従って box add します。
$ vagrant box add windows-2012r2 ./box/virtualbox/eval-win2012r2-standard-nocm-1.0.4.box $ vagrant box list windows-2012r2 (virtualbox, 0)
Vagrantfile
用意されている template を利用するとよさそうです。
$ mkdir ~/vagrant/windows-2012r2 $ cp ~/vagrant/windows/tpl/vagrantfile-eval-win2012r2-standard.tpl ~/vagrant/windows-2012r2/Vagrantfile
Vagrantfile の config.vm.box を編集します。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.define "vagrant-eval-win2012r2-standard" #config.vm.box = "eval-win2012r2-standard" config.vm.box = "windows-2012r2" # Port forward WinRM and RDP config.vm.network :forwarded_port, guest: 3389, host: 3389, id: "rdp", auto_correct:true config.vm.communicator = "winrm" config.vm.guest = :windows config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct:true # Port forward SSH #config.vm.network :forwarded_port, guest: 22, host: 2222, id: "ssh", auto_correct:true config.vm.provider :virtualbox do |v, override| v.gui = true v.customize ["modifyvm", :id, "--memory", 1536] v.customize ["modifyvm", :id, "--cpus", 1] v.customize ["modifyvm", :id, "--vram", "256"] v.customize ["setextradata", "global", "GUI/MaxGuestResolution", "any"] v.customize ["setextradata", :id, "CustomVideoMode1", "1024x768x32"] end ["vmware_fusion", "vmware_workstation"].each do |provider| config.vm.provider provider do |v, override| v.gui = true v.vmx["memsize"] = "1536" v.vmx["numvcpus"] = "1" v.vmx["cpuid.coresPerSocket"] = "1" v.vmx["ethernet0.virtualDev"] = "vmxnet3" v.vmx["RemoteDisplay.vnc.enabled"] = "false" v.vmx["RemoteDisplay.vnc.port"] = "5900" v.vmx["scsi0.virtualDev"] = "lsisas1068" end end config.vm.provider :parallels do |v, override| v.customize ["set", :id, "--cpus", 1] v.customize ["set", :id, "--memsize", 1536] v.customize ["set", :id, "--videosize", "256"] end end
起動してみます!
$ cd ~/vagrant/windows-2012r2 $ vagrant up Bringing machine 'vagrant-eval-win2012r2-standard' up with 'virtualbox' provider... ==> vagrant-eval-win2012r2-standard: Importing base box 'windows-2012r2'... ==> vagrant-eval-win2012r2-standard: Matching MAC address for NAT networking... ==> vagrant-eval-win2012r2-standard: Setting the name of the VM: windows-2012r2_vagrant-eval-win2012r2-standard_1465130882039_49088 ==> vagrant-eval-win2012r2-standard: Clearing any previously set network interfaces... ==> vagrant-eval-win2012r2-standard: Preparing network interfaces based on configuration... vagrant-eval-win2012r2-standard: Adapter 1: nat ==> vagrant-eval-win2012r2-standard: Forwarding ports... vagrant-eval-win2012r2-standard: 3389 => 3389 (adapter 1) vagrant-eval-win2012r2-standard: 5985 => 5985 (adapter 1) ==> vagrant-eval-win2012r2-standard: Running 'pre-boot' VM customizations... ==> vagrant-eval-win2012r2-standard: Booting VM... ==> vagrant-eval-win2012r2-standard: Waiting for machine to boot. This may take a few minutes... vagrant-eval-win2012r2-standard: WinRM address: 127.0.0.1:5985 vagrant-eval-win2012r2-standard: WinRM username: vagrant vagrant-eval-win2012r2-standard: WinRM transport: plaintext ==> vagrant-eval-win2012r2-standard: Machine booted and ready! ==> vagrant-eval-win2012r2-standard: Checking for guest additions in VM... ==> vagrant-eval-win2012r2-standard: Mounting shared folders... vagrant-eval-win2012r2-standard: /vagrant => /home/rriifftt/vagrant/windows-2012r2
180 日間の無償評価版が起動しました!!!
ライセンス問題もセーフっぽいですね。
これでローカルでの test-kitchen が捗りそう。。。
その辺はまた後日。。。
de:code 2016 5/25 メモ
de:code 2016 5/24 メモ - set setting reset の続きです。
powershell
DSC
- コード書く
- mof ファイルができる
- これを送って実行させる
- start-dscconfiguration
- LCM
- local configuration manager
- push は windows から実行
- pull server
- http だけでなく smb でも ok
- 各ノードが server にポーリングする
- CA を使って https 通信可能
- 運用を dsc に寄せることもできる
- Azure Automation
Docker と containter service
- windows container の話ナシ
- mesos + swarm
- microservice architecture
- 開発、移動、実行するプラットフォーム
- linux kernel
- namespace
- リソースの分断
- cgorup
- リソース管理 *コンテナ技術の標準化団体がある
- namespace
- docker が実現したこと
- software が必要な全てをファイルシステムに包む
- どのような環境でも実行を保証
- 軽量。オープン、安全
ランチ devops
best way
- 組織の文化にする
boss に聞く
- 成功するためにどうすればいいと思う?
レガシーなアプリと新しいアプリでは devops のありようが異なる
- 共通で利用できるツールを探すのがよいだろう
hashicorp
vault 推し
- セキュリティのツール
hachicorp はなぜツールを作るのか
- デプロイにまつわるサイクルを短くしたい
- 特定の課題を解決するためのツールを作成している
vagrant が一番 star されてる
- 10000 star
ms support
- 全てのプロダクトで ms をサポートしている
enterprise version がある
terraform
terraform enterprise
- チームで使うための terraform
- github や atlas をトリガーとして、terraform enterprise 上の UI から apply できる
- resource dependency graph
- modules
- collaboration
- ゴール
- インフラを進化するアプリケーションとして扱いたい
- propose
- validate in plan
- approve
- audit
- rollback
- すげぇ
- terraform enterprise 上の revert できる
- あとから問題箇所を精査してプルリクすればいいじゃん
- まるで github のような
- github integration
- notification
- remote state storage
- remote plan + applies + and locks
mesosphere
- container の大規模管理
- SAP の中の人
- chef の中の人
コンテナで複雑化した
DC/OS
- data center を一つのアプリケーションとして考える
- resource pool
- CPU
- NW
- strage...
- resource pool
- microservice(in container) = function
- 全てのバックエンドプラットフォームで対応可能
- azure container service でも OK
- ECS でも OK っぽい
- DC/OS の layer
- container orchestration
- job scheduling
- scale
- Auto Desk 社の事例
- dcos cli
- dcos dashboard
- 稼働中のアプリケーションの状況を監視できる
- application の scale の数を簡単に変更できる
- おまえら DC/OS のブログ書けよw
- data center を一つのアプリケーションとして考える
chef
- devops へのアプローチ
- infrastructure as code はなぜ必要か
- エンジニアの 7割は remote
- 会社は色々とあるが、共通でやりたいことがあるはずだ
- インフラとアプリケーションを同じように扱うべきだ
- 速いのはいいこと、ただしうまくいかなければ意味がない
- ダイナミックなインフラがなければスピーディーなビジネスはない
- 継続的に安全に実験する
- クラウドによって自動化が可能となり、自動化は反復をもたらす
- CI CD TEST なんでもやろう
- ミスの責任が単一にあるとミスを起こさないようにするために遅くなる
- 早く破綻させて破壊しろ
- みんなで解決してみんなで理解できる
- なにが間違っていたかを考える
楽しい仕事には人がやってくる
devops の分析
- 利益、生産性、デプロイ回数の向上
chef だけでなく、ワークフローが必要
- chef delivery というのがあるらしい
devops も問題点
- 監査が大変
- 監査も devops に巻き込む
- コンプライアンスはテストできる = 統制
- chef compliance
- 監査が大変
azure native な chef-client がある
どっちかというと windows のロードマップに追従している
- かなり重視しているとのこと
inspect
事例
- デプロイのコスト削減
- ビルド時間の削減
- セキュリティを先に、その次に devops というケース
chef component
- opensource と課金コンテンツあり
chef server のはなし
- recipe は step のシーケンス
- recipe に書き方
chef の TDD = TDI
dsc_script リソース
- powershell dsc をそのまま書ける
- powershell 5 から
de:code 2016 5/24 メモ
会社のお金で de:code 2016 に参加させてもらいました。 とにかく Azure と DevOps 推しでした。 以下、なぐりがきメモです。
Active Directory 最新動向
Azure AD
- Azure AD
- 13 億の認証 transaction / day
- ms が内部でも利用している (yammerも)
- マルチデバイスサポート
ID 同期
- Azure AD Connect
- DirSync サポート廃止
- 自動アップグレード可能
- local SQL Server が稼働
- powershell で管理できる
- 同期間隔の変更
- 3h -> 30 min
- powershell で管理
- ステージングモード
- 同期サーバのスタンバイを構築可能
- stanby はエクスポート不可
- 昇格可能(failover)
- AD DS と Azure AD の同期が双方向
- 365 グループをオンプレに持ってくることもできる
- マルチフォレスト対応
- ただし複数の同期サーバは構築不可なので、シングルで構築せざるを得ない
- 同一ユーザの同期はサポートされない
- 別々の独立したフォレストに同一ユーザがいるようなケース
- シングルフォレスト
- シンプル
- 基本シングルである方が取り回ししやすい
- マルチフォレスト
- ID管理、属性管理に気を使うべき
- 名寄せしないとアカンケースもあるかもしれない
- 機能的な制約があることが多い
- Azure AD Connect Health
- オンプレの監視
- ADFS + WAP
MIM
- 複数システム間の ID 同期
- sharepoint ベースの ID 管理
- 特権管理
- 証明書
認証
- 認証エンドポイント
- MS アカウントと Azure アカウントを単一の ID として扱うアプリが作れる
- 認証エンドポイント
AAD Join - Windows 10
- ドメイン参加に Azure AD に参加ボタンがある
- デバイス情報も Azure AD で一元管理すればいいじゃん
MS Passport
- ?
Office 365 先進認証
- office client の AD 認証ライブラリ
windows 2016 の ADFS
アプリケーション
- IDaaS
- AzureAD のほうが認証プロトコルが多い
- WS2016 から同等になる
- kerberos は Azure AD は非サポート
- proxyさせればいいらしい
- クレーム認証のアプリケーション
- さまざまな開発言語に対応
- 独自認証
- 独自認証はクレーム認証に移行するといいのでは
- フォーム認証を Azure AD にさせることもできるらしい
- デバイスの制約あり
- Azure AD には各サービスのログイン情報を保持できる
- lastpass みたいな
kerberos 認証
- windows 統合認証
- ?
AD application proxy
- Application proxy connector server にアプリケーションがアクセスして Azure AD にプロキシする
- アクセスパネル -> azure 上の sharepoint で認証 -> proxy -> オンプレに同期 -> オンプレの sharepoint に SSO
Azure domain service
同期フロー
- オンプレから Azure AD に同期
- Azure AD から Azure AD Service に同期
- Azure AD と Azure AD Service はまったく別物
- 信頼関係を結べない
制約
AzureAD collaboration
- 組織間
-
- 承認フローを通して外部の ID を自社の AD に組み込むことができる
- しかも外部の ID 認証は、外部の AD で行う
- ???
- Azure AD 上で信頼関係を作成しておくことが前提
- ただし、テナント間の信頼関係ではなく、テナントと個人の信頼関係
組織外
- Azure AD B2C
- ソーシャルアカウントに対応 (FB / Twitter)
- レアルのファンサイトがこれで実装されている
- サインインにあたり、Azure AD に登録される
セキュリティ
まとめ
- オンプレ + Azure AD = Active Directory
Azure SQL Database
- SQL Server と SQL Database の違い
- PaaS
ユースケース
- クラウドを前提とした SaaS
- 業務アプリ
- 細かい監視とかフェイルオーバーとかは IaaS で SQL サーバ作ってちょ
- 厳密なコントロールとかできましぇん
- SQL Database と SQL Server のコードベースは同じ
- 今までは SQL Server => SQL Database というコードの流れだったが、2016 から逆になった
- .NET / PHP / Java / ODBC
- ruby / python / Node
概説
- 学習
- 稼働履歴からのパフォーマンスチューニングのアドバイスがある
- index
- 自動インデックス作成
- 手動インデックス作成
- query store
- 稼働状況を記録
- SQL Server 2016 と同じ機能
- 性能が劣化したクエリを特定
- リソースを消費しているクエリを特定
- index
- 管理ポータルでのリアルタイム監視
- Threat Detection
- 異常なDBアクティビティを検出
- ポリシー作成
- alert
- audit log
- 異常なDBアクティビティを検出
- 稼働履歴からのパフォーマンスチューニングのアドバイスがある
- 拡張
- basic / standard / premium
- DTU
- Database Transaction Unit
- 相対的なデータベース性能
- 一般的な一連の操作(OLTP)を実行し、1秒間の性能
- 100 DTU なら 100TPS ?
- pay for performance
- インメモリデータベース
- elastic database モデル
- データの安全性
- MS Managed
- Always Encrypt オプションあり
- クライアント側でデータを暗号化
- カラム単位
- 暗号化テキストの検索になるので、完全一致のみサポート
- 行レベルセキュリティ
- Azure AD 認証をサポート
- 動的データマスク
- 重要なデータをマスクして保護
- マスクしない特権ユーザを設定可能
- データの保護
- レプリカを保持
- SLA 99.99
- primary + standby *2
- 同期レプリケーション
- 常に 3 台構成
- Active Geo Replication
- 最大読み取り可能 DB 4 台
Azure と windows と インフラエンジニアと devops
- devops に定義はない
インフラエンジニアの役割
- 手法としては
- infrastructure as code
- CI
- 自動テスト
- 継続的デリバリ
- なぜ devops
- 日々変化するマーケットのニーズに対応する
- 試行錯誤して改善する
- リリースのフィードバックが大事
- フィードバックは ops がするといいね
- azure なら application insight
- ops は dev とコミュニケーションして business をうまくまわるようにしましょう
- ドッグフーディング環境
- A/B テスト
- よいフィードバック
- platform の品質向上
- マイクロサービスアーキテクチャ
- 小さく作ってこまめにリリース
- 機能追加やコード修正の影響範囲を最小化
- リリース時のテストを少なく & 自動的に
- フィードバックのセルフサービス化
- たとえば application insights & power bi
- まぁ、Excelでもいいじゃん
- インフラエンジニアは最後の砦
- システム止まると怒られるのは自分なんだけど・・・
理想と現実
- no risk = no value
- high value = hi risk
- high value を目指さないと意味がない
- high value = low risk を目指しましょう
ギャップを埋めるテクノロジー
- Windows Server2016
- devops を意識しまくり
- container
- 迅速なデプロイ
- 柔軟な変更と rollback
- リソースの有効活用
- nano server
- 超軽量インストールオプション
- 数100MBのサーバOSとして登場予定
- service fabric
- 特権アクセス管理
- 高速化へのアプローチ
- CPU ボトルネックの世界が来てる
- container
- devops を意識しまくり
- Azure
- azure resouce manager
- infrastructure as code
- azure stack
- azure resouce manager
devops の具体的な実現手法
- devopsとは人・プロセス・プロダクトの集合体で継続的にエンドユーザに価値を提供することである
- devops を導入して 10 deploy / day
- infrastructure as code で手作業なくして障害をなくそう
immutable それは破壊的なインフラ
- 壊れたら捨てればいいじゃない
本番は学びの場
- だからこそ適切なフィードバックが必要
継続的な実験と学び
infrastructure as code
- visual studio から docker コンテナデプロイ
- visual studio から仮想マシン起動
devops は plactice から考えて適用するのがよさそう
- devops をやるなら dev + ops + えらいひとを集めて話す必要がある
devops は agile が前提になっている
- agile を取り入れるには西洋文化を取り入れる
日本人は生産性が低い
- 他国とは物量が違う
- 同じことをやるにも日本じゃ大変
- やっていることが過剰なのでは?
- be lazy
- 無駄なことをしない
- エッセンシャル思考
- より少なく、しかしより良く
- やることを計画的に減らす
- 世の中のほとんどのことはノイズである
- ask for help
- 超気軽に質問する
- ggrks ??? なにそれおいしいの???
- 超気軽に断ることも大事
- チーム / PO / UCD が協力してリードタイムを減らす
- 他国とは物量が違う
TDD
- 失敗するテストを書く
- コードを動くようにする
- 重複をなくす(refactor)
デプロイを8.5ヶ月から1weekに短縮
- docker + compose + terraform + serf + azure という例
日本向け devops 導入ステップ
- value stream mapping
- デプロイまでの流れを可視化する
- リードタイムとかをいちいち書き込む
- 無駄を可視化する
- 文化とギャップ要素のインストール
- ハックフェスト
- プレゼンではなくハッカソンする
- ペアプロする
monitarinng と継続的改善
- 定期的にリードタイム等の改善状況を共有する
MS も Rails と思想は似ている
- レールに載ってれば快適
- 魔改造はやめよう
フィードバックの質を上げるために
A/B テスト
- 特定のユーザ
- どうやるんだろ
- feature flag
- ボタン一つでアプリケーションを切り替えられる
- 特定のユーザ
fault injection
- 本番で障害を発生させる
- chaos monkey
- 障害時に正常に動作するか
10 deploy / day できるようになるために devops しよう
最後にその場でブログをアップして終わり http://simplearchitect.hatenablog.com/entry/2016/05/24/185431
boto3 で S3 オブジェクトのコピー
boto3 で S3 の操作メモ
バケットに接続
import boto3 s3 = boto3.resource('s3') bucket_name = "my-bucket" bucket = s3.Bucket(bucket_name)
prefix の文字列で bucket 内のオブジェクトをフィルタ
prefix = 'myfolder/original.txt' bucket.objects.filter(Prefix=prefix) # => s3.ObjectSummary(bucket_name='my-bucket', key=u'myfolder/original.txt')
同一バケット内でオブジェクトのコピー
""" CopySource は Dict 型で渡す """ s3.Object(bucket_name, new_file).copy_from(CopySource={'Bucket': bucket_name, 'Key': original_file_name})
オブジェクトの削除
s3.Object(bucket_name, original_file_name).delete()
フィルタしたオブジェクトを別フォルダにコピーして削除
試していませんが、別のバケットへのコピーでも動きそうです。
import boto3 import time s3 = boto3.resource('s3') bucket_name = 'my-bucket' bucket = s3.Bucket(bucket_name) new_folder = "new" old_folder = "old" for obj in bucket.objects.filter(Prefix=old_folder): old_file = obj.key object_name = obj.key.split("/")[-1] new_file = '%s/%s' % (new_folder, object_name[-1]) # コピーが成功するまで5回繰り返す for i in xrange(1,6): res = s3.Object(bucket.name, new_file).copy_from(CopySource={'Bucket': bucket.name, 'Key': old_file}) if res['ResponseMetadata']['HTTPStatusCode'] == 200: break else: time.sleep(i) # 削除が成功するまで5回繰り返す for i in xrange(1,6): res = obj.delete() if res['ResponseMetadata']['HTTPStatusCode'] == 204: print "moved %s complete" % new_file break else: time.sleep(i)
オブジェクトをローカルにコピー(ダウンロード)
新たに記事書きました。
powershell の連想配列を JSON に変換する
ハッシュを作成します。 @{"Key" = "Value"; }
の形式です。
$Members = @{ "id" = 1; "Name" = "hoge"; }
PSObject を生成します
$MessageObject = New-Object -TypeName PSObject
PSObject にメンバーを追加します
foreach ($key in $Members.Keys) { Add-Member -InputObject $MessageObject -MemberType NoteProperty -Name $key -Value $Members[$key] }
JSON にコンバートします
$MessageJson = ConvertTo-Json -Compress $MessageObject
みてみます。
> $MessageJson {"id":1,"Name":"hoge"}
簡単ですね!
PowerShell再入門:11. PSObjectとは | $m0t0k1x2["code"].content
PowerShell で JSON をファイル入出力 する - tech.guitarrapc.cóm
PowerShell連想配列(ハッシュ) CapmNetwork