Ruby Sample for AWS Cloud9
「そもそもAWS Cloud9、Ruby on Railsサポートしてないんじゃない?テンプレ消えてない??」
って言われたので方向転換してとりあえずAWS Cloud9上でRubyを動かしてみようと思います。
トライするのはこれ。 docs.aws.amazon.com
Step 1: Install Required Tools
kabe:~/environment $ ruby --version ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Rubyは入ってるので(知ってる)、yumの最新化だけしとく。
Step 2: Add Code
Step 3: Run the Code
普通にうごくね。
Step 4: Install and Configure the AWS SDK for Ruby
AWS SDK for RubyをつかってAWSの他のサービスを操作してみる。
まずはAWS SDK for Rubyのインストール
kabe:~/environment $ gem --version 2.6.14 kabe:~/environment $ sudo gem install aws-sdk Fetching: jmespath-1.3.1.gem (100%) 〜中略〜 135 gems installed
スムーズにすすむ(´;ω;`)
ここで他のAWSサービスを操作するための権限設定をしなくてはならないのでIAMコンソールに移動。
After you install the AWS SDK for Ruby, you must set up credentials management in your environment. The AWS SDK for Ruby needs these credentials to interact with AWS services.
Create and Use an Instance Profile to Manage Temporary Credentials
To create an instance profile
Cloud9はEC2でいいのかな???
To attach an instance profile to an instance
Cloud9のEC2インスタンスにさっき作ったRoleをアタッチする
Cloud9に戻ってaws configure
を実行
kabe:~/environment $ aws configure AWS Access Key ID [****************R27Q]: AWS Secret Access Key [****************WYVB]: Default region name [ap-southeast-1]: ap-southeast-1 Default output format [None]:
Step 5: Add AWS SDK Code
Roleの設定ができたのでRuby Sampleに戻ります。
YOUR_REGIONを環境に合わせて書き換えるの忘れないで。
Step 6: Run the AWS SDK Code
Oh...エラー出ちゃった…
どうもさっきインストールしたaws-sdk
にパスが通ってない??
aws-sdk
自体は/usr/local/share/ruby/gems/2.0/gems
にインストールされている模様
kabe:~/environment $ gem env RubyGems Environment: - RUBYGEMS VERSION: 2.6.14 - RUBY VERSION: 2.4.1 (2017-03-22 patchlevel 111) [x86_64-linux] - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1 - USER INSTALLATION DIRECTORY: /home/ec2-user/.gem/ruby/2.4.0 - RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.4.1/bin/ruby - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1/bin - SPEC CACHE DIRECTORY: /home/ec2-user/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /usr/local/rvm/rubies/ruby-2.4.1/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /usr/local/rvm/gems/ruby-2.4.1 - /usr/local/rvm/gems/ruby-2.4.1@global - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /home/ec2-user/.nvm/versions/node/v6.11.4/bin - /usr/local/rvm/gems/ruby-2.4.1/bin - /usr/local/rvm/gems/ruby-2.4.1@global/bin - /usr/local/rvm/rubies/ruby-2.4.1/bin - /usr/local/bin - /bin - /usr/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /usr/local/sbin - /usr/sbin - /sbin - /opt/aws/bin - /usr/local/rvm/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin kabe:~ $ which gem /usr/local/rvm/rubies/ruby-2.4.1/bin/gem
そうだよねぇ…そこにないもんねぇ。なんで違うとこにインストールされちゃったのかな。
いったんPATH通してみる。
kabe:~/ $ export RUBYLIB=/usr/local/share/ruby/gems/2.0/gems kabe:~ $ source .bashrc function
うーん、ダメでした。そもそもrvmで管理してるgemの置き場所じゃないところにaws-sdk
をインストールしちゃってるのがダメなのかな??
てかINSTALLATION DIRECTORY
にインストールされるはずなんだけど、なんで違うとこに入っちゃうの??
kabe:~ $ gem install aws-sdk 〜略〜 kabe:~ $ find /usr/local/ -name "aws-sdk-s3-1.8.0*" /usr/local/share/ruby/gems/2.0/specifications/aws-sdk-s3-1.8.0.gemspec /usr/local/share/ruby/gems/2.0/cache/aws-sdk-s3-1.8.0.gem /usr/local/share/ruby/gems/2.0/gems/aws-sdk-s3-1.8.0 /usr/local/share/ruby/gems/2.0/doc/aws-sdk-s3-1.8.0 /usr/local/rvm/gems/ruby-2.4.1/specifications/aws-sdk-s3-1.8.0.gemspec /usr/local/rvm/gems/ruby-2.4.1/cache/aws-sdk-s3-1.8.0.gem /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0 /usr/local/rvm/gems/ruby-2.4.1/doc/aws-sdk-s3-1.8.0
sudo
しないでgem install
し直したら治った。なんなのよ(´;ω;`)
/usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call': The AWS Access Key Id you provided does not exist in our records. (Aws::S3::Errors::InvalidAccessKeyId) from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:22:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/plugins/dualstack.rb:26:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:20:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/idempotency_token.rb:17:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/param_converter.rb:24:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/plugins/response_target.rb:23:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/request.rb:70:in `send_request' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/client.rb:3321:in `list_buckets' from /home/ec2-user/environment/s3.rb:9:in `list_my_buckets' from /home/ec2-user/environment/s3.rb:18:in `<main>' Process exited with code: 1
違うエラーになったよ!
アクセスキーが無効…。ロールのアタッチのときにアクセスキーの発行までやったっけ???
つーことで、もっかい↓に戻ります。
Calling AWS Services from an Environment in AWS Cloud9 - AWS Cloud9