雑記帳
2011-10-26 (Wed) [長年日記]
■ fuse 2.8.6はCentOS 5では動作しない
s3fsを使うためにfuseが必要なのだが、fuseのstable releaseの最新である2.8.6は、CentOS 5では動作しないことが分かった。mountしようとすると、次のようなエラーが出る。
/bin/mount: unrecognized option `--no-canonicalize'
これは、fuse 2.8.6で、mountコマンドに--no-canonicalizeオプションが必須になったかららしい。
CentOS 5に入っているmountコマンドはやや古く、--no-canonicalizeオプションがない。CentOS 6であれば対応している。--no-canonicalizeに対応していない古いmountを使っている環境の場合、fuse 2.8.5を使えば良い。
■ [AWS][Ruby] AWS SDK for Rubyでセキュリティグループの取得方法
ドキュメントによると、下記のように書いてある。
# get two existing security groups dbsvrs = ec2.security_groups['db-servers'] websvrs = ec2.security_groups['web-servers'] # allow instances in the 'web-servers' security group to connect # to instances in the 'db-servers' security group over tcp port 3306 dbsvrs.authorize_ingress(:tcp, 3306, websvrs)
AWS::EC2::SecurityGroupCollection#[]に、セキュリティグループ名を渡して取得している。実はこれは誤りで、例えば以下のようなコードを実行すると、エラーになる。
sg = AWS::EC2.new.security_groups['default'] sg.id #=> "default" sg.name #=> AWS::EC2::Errors::InvalidGroupId::Malformed: <?xml version="1.0" encoding="UTF-8"?><Response><Errors><Error><Code>InvalidGroupId.Malformed</Code><Message>Invalid id: "default" (expecting "sg-...")</Message></Error></Errors><RequestID>1950836d-dfea-4600-8ad0-b852cc056b2a</RequestID></Response>
エラーメッセージにあるように、AWS::EC2::SecurityGroupCollection#[]には、idを渡さなけれればならない。
sg = ec2.security_groups['sg-98a62799']
また、名前で取得するには、下記のようにfilterを使う。
sg = ec2.security_groups.filter('group-name', 'default').first
ドキュメントは誤りがあったということで、次回のリリース時に訂正される予定。
しかし不思議なことに、下記のコードは正しく動作する。
ec2 = AWS::EC2.new i = ec2.instances.create(:image_id => 'ami-dcfa4edd', :instance_type => 't1.micro', :security_groups => ec2.security_groups['default']) i.security_groups.each {|sg| puts sg.id} #=> sg-98a62799
どうやら、AWS::EC2::InstanceCollection#createは、オプションとして受け取るセキュリティグループは、名前かIDのどちらでも受け付けるかららしい。これはちょっと混乱する…。