AWSのAPIにアクセスするRubyのスクリプトの改善です。
これまでクレデンシャルの情報をハードコーディングしていたものをファイルを使用するように書き換えます。
ちなみにSDKは「AWS SDK for Ruby V2」になります。
下記のスクリプトはS3バケット内のファイルを全て削除するスクリプトです。
スクリプトの最初の方にクレデンシャルの情報を記述しています。
require 'aws-sdk-core' require 'awesome_print' Aws.config = { :access_key_id => 'XXXXXXXXXXXXXXXXXXXX', :secret_access_key => 'XXXXXXXXXXXXXXXXXXXX', :region => 'ap-northeast-1' } s3 = Aws::S3::Client.new pager = s3.list_objects(bucket: "バケット名", prefix: "", max_keys: 100) while true do objects = pager.contents.map(&:key).map{|key| {key: key}} resp = s3.delete_objects(bucket: "バケット名", delete: { objects: objects }) break if pager.last_page? pager = pager.next_page end
下記のスクリプトはクレデンシャルファイルを使用するよう書き換えたものです。
「Aws.config」の箇所を変更しただけです。
なお、test-userというクレデンシャルを使用しています。
require 'aws-sdk-core' require 'awesome_print' Aws.config = { :profile => 'test-user', :region => 'ap-northeast-1' } s3 = Aws::S3::Client.new pager = s3.list_objects(bucket: "バケット名", prefix: "", max_keys: 100) while true do objects = pager.contents.map(&:key).map{|key| {key: key}} resp = s3.delete_objects(bucket: "バケット名", delete: { objects: objects }) break if pager.last_page? pager = pager.next_page end
クレデンシャルファイルは下記のように記述します。
[test-user] aws_access_key_id=XXXXXXXXXXXXXXXXXX aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
クレデンシャルファイルはユーザーディレクトリに「.aws」のディレクトリ作成し中に配置します。
■Windows
C:\Users\ウインドウズのログインユーザー名\.aws\credentials
■Linux
~/.aws/credentials
今回、一時的にローカルで使用していたスクリプトをCIに組み込むことにしたためクレデンシャル情報を外だしにする必要が出てきました。
アクセスキーをあちこちに記述したり、Gitのリポジトリに登録するのは危険なので極力クレデンシャルファイルを使用しましょう。