できるだけシンプルにするために each_blob を使用します。 「.git ディレクトリだけを含む空のリポジトリ」が何を意味するのかを確認するために、.git には操作するものは何もありません。
概要
Ruby で AWS SecretsManager SDK を使用しようとしていますが、次のエラーが発生します。
.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/aws-sdk-core-3.186.0/lib/aws-sdk-core/ini_parser.rb:28:in `block in ini_parse': undefined method `[]' for nil:NilClass (NoMethodError)
if current_prefix.nil? && previous_item[2].strip.empty?
このコードは、シークレット マネージャーにシークレットをアップロードするときに AWS によって提案される標準です。
require 'aws-sdk-secretsmanager'
# Retrieves secrets from AWS Secrets Manager
module SecretsManager
def aws_secret(secret)
client = Aws::SecretsManager::Client.new(region: 'eu-central-1')
begin
get_secret_value_response = client.get_secret_value(secret_id: secret)
rescue StandardError => e
raise e
end
get_secret_value_response.secret_string
end
def secrets
secrets ||= aws_secret('test')
JSON.parse(secrets)
end
end
私の推測では、SDK が ~/.aws/config ファイルの解析に失敗しているようですが、私の知る限りそのファイルには何も問題はなく、AWS にログインし、CLI で SecretsManager を使用してシークレットを正常に取得できます。
何か案は?ありがとう!
解決策
私のマシンで問題を再現することができました。
これは、エラーを発生させた ~/.aws/config でした。 aws_access_key_id と aws_secret_access_key の間の空行と、aws_secret_access_key の直前のスペースに注目してください。
[default]
region = ap-northeast-1
aws_access_key_id = AKIABLAHBLAHBLAH
aws_secret_access_key = secretSECRET+secret/SECRET
/Users/xxxx/.rvm/gems/ruby-3.2.2/gems/aws-sdk-core-3.186.0/lib/aws-sdk-core/ini_parser.rb:28:in `block in ini_parse': undefined method `[]' for nil:NilClass (NoMethodError)
if current_prefix.nil? && previous_item[2].strip.empty?
空行と不要なスペースを削除することで、SDK は問題なく構成を解析できました。
[default]
region = ap-northeast-1
aws_access_key_id = AKIABLAHBLAHBLAH
aws_secret_access_key = secretSECRET+secret/SECRET