Я хотел бы иметь возможность использовать файл ~ / .aws / credentials, который я поддерживаю с разными профилями, с моим приложением Spark Scala, если это возможно. Я знаю, как установить конфигурации hadoop для s3a внутри моего приложения, но я не хочу продолжать использовать жестко запрограммированные разные ключи и предпочитаю просто использовать свой файл учетных данных, как я делаю с другими программами. Я также экспериментировал с использованием java api, например val credentials = new DefaultAWSCredentialsProviderChain().getCredentials()
, а затем создавал клиент s3, но это не позволяло мне использовать мои ключи при чтении файлов с s3. Я также знаю, что ключи могут входить core-site.xml
, когда я запускаю свое приложение, но как я могу управлять разными ключами, а также как я могу настроить его с помощью IntelliJ, чтобы я мог использовать разные ключи, используя разные профили?
Использование профилей учетных данных aws с приложением Spark Scala
Ответы (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. При необходимости с радостью расскажу подробнее о любом конкретном моменте.
Если у вас установлены 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.
AmazonS3Client client = new AmazonS3Client(new ProfileCredentialsProvider("my_profile_name"))
? Не уверен, как это применимо к чтению файлов s3 с помощью Spark с использованиемs3a://
- person horatio1701d   schedule 30.07.2016