«前の日記(2011-10-24 (Mon)) 最新 次の日記(2011-10-28 (Fri))» 編集

雑記帳


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のどちらでも受け付けるかららしい。これはちょっと混乱する…。