Обновите/настройте AWS SDK версии 3 с помощью Nestjs
Недавно я получил это предупреждение об обновлении версии AWS SDK для Nodejs, которое я использовал для своего старого проекта Nestjs. Предупреждение такое:
Мы формализуем наши планы по переводу AWS SDK для JavaScript (v2) в режим обслуживания в 2023 году.
Перенесите свой код, чтобы использовать AWS SDK для JavaScript (v3)
Поэтому я подумал, что, возможно, пришло время перейти на v3. Я предполагал, что мне просто нужно будет обновить пакеты до их более новых версий, и это сработает, но оказалось, что это не так, и мне пришлось изменить прямо от того, как мы импортируем пакет, до вызова функций API.
Раньше я использовал «aws-sdk» и «nest-aws-sdk», которые я заменил на «@aws-sdk/{service}» и «aws-sdk-v3-nest» соответственно для их целей.
app.module.ts (старый импорт)
import { AwsSdkModule } from 'nest-aws-sdk'; import { SharedIniFileCredentials, S3, SecretsManager, CognitoIdentityServiceProvider, } from 'aws-sdk';
app.module.ts (новый импорт)
import { AwsSdkModule } from 'aws-sdk-v3-nest'; import { S3Client } from '@aws-sdk/client-s3'; import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager'; import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { fromIni } from '@aws-sdk/credential-providers';
Теперь посмотрим конфигурации:
app.module.ts(старый)
@Module({ imports: [ AwsSdkModule.forRootAsync({ defaultServiceOptions: { useValue: { signatureVersion: 'v4', region: '{region}', credentials: !process.env.LAMBDA_TASK_ROOT && !process.env.AWS_EXECUTION_ENV ? new SharedIniFileCredentials({ profile: '{my local aws profile name}', }) : null, }, }, services: [S3, SecretsManager, CognitoIdentityServiceProvider], }), ... ], });
Объяснение:
Здесь, в приведенном выше коде, я настроил учетные данные, которые ищут переменную среды «LAMBDA_TASK_ROOT», чтобы узнать, находится ли она в Lamba (мой код был развернут на лямбде…