Использование профилей учетных данных aws с приложением Spark Scala

Я хотел бы иметь возможность использовать файл ~ / .aws / credentials, который я поддерживаю с разными профилями, с моим приложением Spark Scala, если это возможно. Я знаю, как установить конфигурации hadoop для s3a внутри моего приложения, но я не хочу продолжать использовать жестко запрограммированные разные ключи и предпочитаю просто использовать свой файл учетных данных, как я делаю с другими программами. Я также экспериментировал с использованием java api, например val credentials = new DefaultAWSCredentialsProviderChain().getCredentials(), а затем создавал клиент s3, но это не позволяло мне использовать мои ключи при чтении файлов с s3. Я также знаю, что ключи могут входить core-site.xml, когда я запускаю свое приложение, но как я могу управлять разными ключами, а также как я могу настроить его с помощью IntelliJ, чтобы я мог использовать разные ключи, используя разные профили?


person horatio1701d    schedule 29.07.2016    source источник
comment
У меня нет времени искать ссылки, но вы можете указать, какой файл использовать для учетных данных, а не использовать цепочку поставщиков по умолчанию.   -  person childofsoong    schedule 30.07.2016
comment
Спасибо. Не могли бы вы рассказать подробнее о том, что вы имеете в виду? Вы имеете в виду, что все еще используете AmazonS3Client client = new AmazonS3Client(new ProfileCredentialsProvider("my_profile_name"))? Не уверен, как это применимо к чтению файлов s3 с помощью Spark с использованием s3a://   -  person horatio1701d    schedule 30.07.2016


Ответы (2)


По умолчанию AWSCredentialsProviderChain не содержит провайдеров. Вам нужно добавить, например:

val awsCredentials = new AWSCredentialsProviderChain(new 
  auth.EnvironmentVariableCredentialsProvider(), new 
  auth.profile.ProfileCredentialsProvider(), new 
  auth.AWSCredentialsProvider())

Вы можете использовать их с клиентом S3 или, как вы упомянули, Spark:

hadoopConfig.set("fs.s3a.access.key", awsCredentials.getAWSAccessKeyId)
hadoopConfig.set("fs.s3a.secret.key", awsCredentials.getAWSSecretKey)

Чтобы переключаться между разными профилями AWS, вы можете переключаться между профилями, задав переменную среды AWS_PROFILE. При необходимости с радостью расскажу подробнее о любом конкретном моменте.

person Max Murphy    schedule 03.04.2018

Если у вас установлены AWS_ переменные env, spark-submit скопирует их как секреты s3a.

Если вы хотите установить цепочку поставщиков для S3A, вы можете предоставить список классов поставщиков в опции fs.s3a.aws.credentials.provider. Они будут созданы с экземпляром конфигурации, если он присутствует, в противном случае используется пустой конструктор. Список по умолчанию: один для получения секретов из URI или конфигурации, один для переменных env и, наконец, один для секретов IAM EC2. Вы можете изменить их на существующие (анонимный провайдер, провайдер сеанса) или написать свои собственные ... разрешено все, что реализует com.amazonaws.auth.AWSCredentialsProvider.

У вас должна быть возможность установить fs.s3a.aws.credentials.provider на com.amazonaws.auth.profile.ProfileCredentialsProvider и получить его локально (возможно, вам понадобится ваша собственная оболочка, которая извлекает имя профиля из переданной конфигурации. Это будет работать на любом хосте, у которого есть ваши учетные данные ... он выиграл не работает, если у вас есть только локальные секреты и вы хотите отправить работу где-то еще. Вероятно, проще всего установить переменные среды и передать их с помощью spark-submit.

person stevel    schedule 04.04.2018