Author Archives: cyberarchitect

書評『PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説』

    PowerShellやDSCの最新情報についていつも参考にさせていただいている @guitarrapc_techさんが本を出版されたとのことで、 これは買わねばなるまいと思っていました。 そんな時、マイナビ出版さんが先行レビューの希望者を募集されていましたので、 イチかバチかで申し込んでみたところ、 ご恵贈いただきました。 マイナビ出版さん、ありがとうございましたm(__)m   わたしの周辺のPowerShell事情   ここ数年、仕事ではもはやクラウド(主にAWS)関連のコンサルやデリバリーばかりやっています。 Serverless、Container等の新しい潮流は増えてきているものの、 わたしがビジネスを行っているエンタープライズ領域のシステム開発では、 未だWindowsやLinuxを利用するIaaSの活用が主流です。 当然ながら、ビジネスのバックエンドで動くシステムでは運用を自動化します。 AWSならLambdaのcronライクな機能を使って運用タスクのスケジューリングを行うこともできますが、 エンタープライズ領域ではオンプレミスに構築された統合ジョブ実行基盤(JP1、Systemwalker、WebSAM、Senju等)や、 クラウド上に構築したジョブ実行基盤を利用して運用タスクの自動化を行うケースがほとんどです。 運用タスクを自動化するスクリプトは、Linux環境であればbashやPythonが多いのですが、 Windows環境は近年やはりPowerShellがメインになってきています。   PowerShellが出始めた頃(2006年頃)は、どうもあのコマンドレットというものの羅列に馴染めず、 WSHやコマンドプロンプト(.bat)で十分、と思っていた時期が私にもありました。 が、Infrastructure as Codeが流行りだし、CloudFormationやAnsibleの勉強をする中で、 PowerShell DSCというものに出会い、少しずつPowerShellに触れるようになってきました。 慣れてくると、WSHや.batよりも、PowerShellの方がコードがすっきりしますし、 例外処理やOSの機能を活用するような処理もやりやすいですね。 現在、AWSのEC2上で運用スクリプトを書く場合は、PowerShellでAWS CLIをラップして 作成しています。 AWSでWindowsインスタンスを起動すると、AWS Tools for Windows PowerShellがプレインストールされているのですが、 敢えてAWS CLIをインストールしています。 理由としては、AWS CLIであればWindows環境で作成した運用スクリプトのAWS CLI部分を Linux環境に移植しやすいですし、 AWS CLIであれば、S3とEC2間のファイル転送時に最大同時リクエスト数やマルチパート処理が採用されるファイルサイズの閾値(デフォルト5GB)を変更できるからです。 (AWS Tools for Windows PowerShellではまだそこまで細かい制御はできない・・はず) AWS CLI S3 Configuration — AWS CLI 1.15.28 Command Reference   そんなわけで、Windows環境の運用スクリプトはPowerShellで統一しているわけですが、 クラウドチームの若者たちは、かつてのわたしがそうだったように、 どうも始めはPowerShellに抵抗があるようです。   そんな時におすすめの一冊が、本書『PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~』だと思います。 PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~ posted with amazlet at 18.05.27 吉崎 生 マイナビ出版 (2018-05-30)売り上げランキング: 14,584 Amazon.co.jpで詳細を見る   なぜ若者におすすめか   先ず、本書は1章で「ファイルのリネーム」であったり、「Webサイトのヘルスチェック」のような PowerShellを使った便利機能の紹介から始まります。 サンプルを写経することで、とりあえず動かして「おお!」という感動を得られる点がよいです。 通常の言語本では、基本的なシンタックスや変数の定義等の文法の説明から入りますが、 そういうのは2章以降、豊富なサンプルと一緒に解説されますので、 読み始めでいきなり挫折、という悲劇を回避できます。   また、PowerShellの機能が網羅的に説明されている一方、 5章では「実世界のPowerShell」として、 PowerShellでハマりやすいポイントについて事例が紹介されており参考になりますし、 AWS、Azure、GCPといったクラウド対応や、DSCについての記述もあり、 PowerShellの運用スクリプト以外の使い方についても学べるところが良いですね。 リファレンスとして身近に置いておきたい一冊です。 クラウドの中でも、AzureについてはGUIがイケてないPowerShellの方が操作がしやすい、というのもあります。 AzureのPowerShellツールは現状クラシックなASMと最新のARMが混在している状況でちょっとわかりづらいところもありますが、 Azureの認定試験でも頻出問題でもありますし、また実際の運用でも多用しますので、 AWSとAzureのマルチクラウドエンジニアを目指すのであれば、PowerShellは必須スキルと言えます。   というわけで   PowerShellをこれから学びたいという方に、 雰囲気で使っているのできちんと学びなおしたい方にも、 本書は大いにおすすめできます。 恥ずかしながら、PowerShell6.0と、現行のWindows […]

Amazon Linuxでserverspec-initができない(`require’: cannot load such file — io/console (LoadError))

    Amazon Linuxでserverspecのインストールはできるが、 serverspec-initができない。 Amazon LinuxのAMI IDはamzn-ami-hvm-2017.03.0.20170417-x86_64-gp2 (ami-923d12f5)、 Rubyのバージョンはruby 2.0.0p648 (2015-12-16) [x86_64-linux]、 rakeのバージョンはrake, version 12.0.0。   serverspec-initを実行すると、 [ec2-user@ip-192-168-11-11 serverspec]$ serverspec-init /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’: cannot load such file — io/console (LoadError) from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/prompt.rb:1:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/key_factory.rb:2:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/authentication/key_manager.rb:2:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/authentication/session.rb:4:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh.rb:12:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra/backend/ssh.rb:3:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra/backend.rb:3:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra/core.rb:7:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/specinfra-2.67.9/lib/specinfra.rb:1:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in […]

awspecでspecファイルをgenerateすると(中略)awsecrets-1.10.1/lib/awsecrets.rb:59:in `exist?’: no implicit conversion of nil into String (TypeError)

    Infrastructure as codeである。   「エンタープライズにAWS?早い早い」などという担当者の方の冷笑はいまや昔。 今日ではあの三菱東京UFJ銀行までがAWSを利用しようかというご時勢である。 そんな時流に乗り、弊社も忙しい。とっても忙しい。 手のぬくもりを大切にした環境構築ではもはや追いつかない。 そこで自動化を推進するわけである。 Terraformは以前からちょいちょい触っていたが、インフラ構築にもTDDをということで、 awsspecを検証してみた。   Amazon Linuxに2.x系のRubyを入れ(詳細は割愛する)、 gem install awspec mkdir awspec cd awspec awspec init ここまでは順調。 問題はこの後、 echo “require ‘spec_helper'” > spec/ec2_and_rds_spec.rb awspec generate vpc vpc-xxxxxxxxxc >> spec/ec2_and_rds_spec.rb しようとすると、 $ awspec generate vpc vpc-1871177c >> spec/ec2_and_rds_spec.rb /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/awsecrets-1.10.1/lib/awsecrets.rb:59:in `exist?’: no implicit conversion of nil into String (TypeError) というエラーが出る。   “secrets”とあるからてっきりaws configure関連かと思ったが、実行しても変わりはない。 こんな時は公式サイトを見るのだ。   結局、 ・specディレクトリの下にsecrets.ymlを作成 $ cat <<EOF > spec/secrets.yml region: ap-northeast-1 aws_access_key_id: XXXXXXXXXXXXXXXXXXXX aws_secret_access_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX EOF ・awsecretsをインストールする $ gem install awsecrets とやったところ、specファイルが生成され、自動テストが実行できるようになった。   パラメータシートとにらめっこして画面ショットを取るのもせつないので、 うまく活用していきたい。   Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス posted with amazlet at 17.05.02 Kief Morris オライリージャパン 売り上げランキング: 9,259 Amazon.co.jpで詳細を見る