Techioz Blog

できるだけシンプルにするために 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