Обновите/настройте 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 (мой код был развернут на лямбде…