Ссылка на идентификатор физического ресурса в AwsCustomResource в onUpdate или onDelete - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь создать AwsCustomResource, чтобы сделать одиночных AWS вызовов API , в частности (create|update|delete)-organisational-unit. В onCreate я вижу, что для возврата идентификатора OU в качестве идентификатора физического ресурса я могу указать physicalResourceIdPath, однако для onUpdate и onDelete мне нужно указать это в вызове API.

Я не могу понять, как, кроме как использовать обычные пользовательские ресурсы с моей собственной лямбдой, чтобы получить доступ к event.

Вот то, что у меня есть, 'help?' - это то, что я ' м отсутствует.

import * as cdk from '@aws-cdk/core';
import { AwsCustomResource } from '@aws-cdk/custom-resources'

export interface OrganisationalUnitProps {
  readonly name: string;
  readonly parentId: string;
}

export class OrgansationalUnit extends AwsCustomResource {
  constructor(scope: cdk.Construct, id: string, props: OrganisationalUnitProps) {
    super(scope, id, {
      onCreate: {
        service: 'Organizations',
        action: 'createOrganizationalUnit',
        parameters: {
          Name: props.name,
          ParentId: props.parentId
        },
        physicalResourceIdPath: 'OrganizationalUnit.Id'
      },
      onDelete: {
        service: 'Organizations',
        action: 'deleteOrganizationalUnit',
        parameters: {
          OrganizationalUnitId: 'help?'
        }
      }
    });
  }
}

1 Ответ

0 голосов
/ 20 апреля 2020

Хотя пока не существует абсолютно чистого способа сделать это, вот ответ, который мне дали в этом выпуске , который я поднял на странице CDK github.

Вы создаете два пользовательских ресурса. Один - просто создание, а другой - просто удаление.

const connectDirectory = new AwsCustomResource(this, 'ConnectDirectory', {
  onCreate: {
    service: 'DirectoryService',
    action: 'connectDirectory',
    parameters: { ... },
    physicalResourceId: PhysicalResourceId.fromResponse('DirectoryId')
  },
});
const deleteDirectory = new AwsCustomResource(this, 'DeleteDirectory', {
  onDelete: {
    service: 'DirectoryService',
    action: 'deleteDirectory',
    parameters: {
      DirectoryId: connectDirectory.getResponseField('DirectoryId'),
    },
  },
});

Эта проблема github была принята как запрос на изменение, поэтому в будущем может быть лучший ответ.

...