Надстройте/Настройте 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 (моят код е внедрен на lambda...