“Stream to Amazon Elasticsearch Service” does not work

 


 

なんということもない、CloudWatch LogsデータのElasticsearch Serviceへのストリーミングが動かない(というか設定できない)。

マネジメントコンソールの設定に沿って手順を進めると、

最後の”Start Streaming”のところでエラーが発生して

ストリーミングが開始できない。


There was a problem
There was an error creating your Lambda Function. Please try again.

 

CloudTrailを確認すると、

どうやら「CreateFunction20150331」なるファンクションが実行され、

それが「InvalidParameterValueException」で落ちている模様。


 

実際のログを確認すると、


"errorMessage":"The runtime parameter of nodejs4.3 is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejs8.10) while creating or updating functions."

とエラーが吐かれている。

どうやら、マネジメントコンソールからElasticesearch Serviceのストリーミングを開始した際、

裏で実行されるLambdaがNode.js4.3で書かれていることが原因のように見える。

 
確かに、Node.js v4.3で書かれたLambdaファンクションは今年EOLになった。

AWS Developer Forums: Node.js v4.x is now EOL, please migrate your functions to a newer runtime version
https://forums.aws.amazon.com/ann.jspa?annID=5694
 
ググると、同じバグを踏んだ人がいた模様。

Had a strange case with Cloudwatch Logs Stream to ElasticSearch today… AWS says it’s a bug on their end? : aws https://www.reddit.com/r/aws/comments/a7eup5/had_a_strange_case_with_cloudwatch_logs_stream_to/

 
いや、まあLambda書きゃいいんですけど、面倒だ。とゆうか初学者はエラーの原因も探れず困ると思う。
 

AWSによるサーバーレスアーキテクチャ
Peter Sbarski
翔泳社
売り上げランキング: 107,099

書評『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実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~
吉崎 生
マイナビ出版 (2018-05-30)
売り上げランキング: 14,584

 

なぜ若者におすすめか

 
先ず、本書は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 Server 2016で既定のPowerShell5.1には
大きな違いがあるということを、本書を読んで初めて知りました。
そのあたりについてもPowerShellの歴史と共に詳しく記述されていますので、
ぜひ読んでみて下さい。

 
なお、本書のページ数は600ページ、厚さにする3.5cmとかなり鈍器感ありますので、
通勤のお供にされる方は電子書籍版やPDF版もどうぞ!!!

カテゴリー: PowerShell | コメントは受け付けていません。

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 `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/serverspec-2.38.0/lib/serverspec.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/serverspec-2.38.0/bin/serverspec-init:5:in `'
from /home/ec2-user/bin/serverspec-init:23:in `load'
from /home/ec2-user/bin/serverspec-init:23:in `

'

となる。

ログを見て、ああ、io-consoleがないのね、と思い、gem install io-console するが、


[ec2-user@ip-192-168-11-11 serverspec]$ gem install io-console
Fetching: io-console-0.4.6.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing io-console:
ERROR: Failed to build gem native extension.

/usr/bin/ruby2.0 extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/ruby/include/ruby.h

Gem files will remain installed in /home/ec2-user/.gem/ruby/2.0/gems/io-console-0.4.6 for inspection.

となる。

むむーーーーーー

ヘッダーファイルがみつからない的なエラーが出ているため、

sudo yum -y install ruby-devel

したが変わらず。

それではということで、

sudo yum install -y ruby20-devel gcc-c++

したらio-consoleインストールできた!!!!!!!!!

 
というわけで、無事serverspec-initもできた。

最近のAmazon LinuxのRubyだと起きる・・?