Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 in die Wartung aufgenommen und der Support wurde am 1. Juni 2023 eingestellt.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Ressourcen sind das, was Sie für die Verwendung AWS-Services in Ihren Anwendungen konfigurieren. Ressourcen sind ein Feature von AWS CloudFormation. Indem Sie Ressourcen und ihre Eigenschaften in einer AWS CloudFormation Vorlage konfigurieren, können Sie diese bereitstellen, AWS CloudFormation um Ihre Ressourcen bereitzustellen. Mit dem AWS Cloud Development Kit (AWS CDK) können Sie Ressourcen mithilfe von Konstrukten konfigurieren. Anschließend stellen Sie Ihre CDK-App bereit. Dazu müssen Sie eine AWS CloudFormation Vorlage synthetisieren und diese bereitstellen, AWS CloudFormation um Ihre Ressourcen bereitzustellen.
Konfiguration von Ressourcen mithilfe von Konstrukten
Wie unter beschriebenAWS CDK Konstrukte, AWS CDK bietet das eine umfangreiche Klassenbibliothek mit Konstrukten, sogenannten AWS Konstrukten, die alle Ressourcen repräsentieren. AWS
Um eine Instanz einer Ressource mit dem entsprechenden Konstrukt zu erstellen, übergeben Sie den Gültigkeitsbereich als erstes Argument, die logische ID des Konstrukts und eine Reihe von Konfigurationseigenschaften (Requisiten). Hier erfahren Sie beispielsweise, wie Sie mithilfe des SQS.Queue-Konstrukts aus der Construct Library eine Amazon SQS-Warteschlange mit AWS KMS Verschlüsselung erstellen. AWS
import * as sqs from '@aws-cdk/aws-sqs';
new sqs.Queue(this, 'MyQueue', {
encryption: sqs.QueueEncryption.KMS_MANAGED
});
Einige Konfigurationsrequisiten sind optional und haben in vielen Fällen Standardwerte. In einigen Fällen sind alle Requisiten optional, und das letzte Argument kann vollständig weggelassen werden.
Ressourcenattribute
Die meisten Ressourcen in der AWS Construct-Bibliothek stellen Attribute zur Verfügung, die bei der Bereitstellung von AWS CloudFormation aufgelöst werden. Attribute werden in Form von Eigenschaften für die Ressourcenklassen mit dem Typnamen als Präfix verfügbar gemacht. Das folgende Beispiel zeigt, wie die URL einer Amazon SQS SQS-Warteschlange mithilfe der Eigenschaft queueUrl
(Python:queue_url
) abgerufen wird.
import * as sqs from '@aws-cdk/aws-sqs';
const queue = new sqs.Queue(this, 'MyQueue');
const url = queue.queueUrl; // => A string representing a deploy-time value
Informationen darüber, wie die Bereitstellungszeitattribute als AWS CDK Zeichenketten kodiert, finden Sie unterTokens und die AWS CDK.
Ressourcen referenzieren
Bei der Konfiguration von Ressourcen müssen Sie häufig auf Eigenschaften einer anderen Ressource verweisen. Im Folgenden sind einige Beispiele aufgeführt:
-
Eine Amazon Elastic Container Service (Amazon ECS) -Ressource benötigt einen Verweis auf den Cluster, auf dem sie ausgeführt wird.
-
Für eine CloudFront Amazon-Distribution ist ein Verweis auf den Amazon Simple Storage Service (Amazon S3) -Bucket erforderlich, der den Quellcode enthält.
Sie können auf eine der folgenden Arten auf Ressourcen verweisen:
-
Indem Sie eine in Ihrer CDK-App definierte Ressource übergeben, entweder im selben Stack oder in einem anderen
-
Indem Sie ein Proxy-Objekt übergeben, das auf eine in Ihrem AWS Konto definierte Ressource verweist und aus einer eindeutigen Kennung der Ressource (z. B. einem ARN) erstellt wurde
Wenn die Eigenschaft eines Konstrukts ein Konstrukt für eine andere Ressource darstellt, entspricht ihr Typ dem Schnittstellentyp des Konstrukts. Das Amazon ECS-Konstrukt nimmt beispielsweise eine Eigenschaft cluster
vom Typ anecs.ICluster
. Ein anderes Beispiel ist das CloudFront Verteilungskonstrukt, das eine Eigenschaft sourceBucket
(Python:source_bucket
) vom Typ annimmts3.IBucket
.
Sie können jedes Ressourcenobjekt des richtigen Typs, das in derselben AWS CDK App definiert ist, direkt übergeben. Das folgende Beispiel definiert einen Amazon ECS-Cluster und verwendet ihn dann, um einen Amazon ECS-Service zu definieren.
const cluster = new ecs.Cluster(this, 'Cluster', { /*...*/ });
const service = new ecs.Ec2Service(this, 'Service', { cluster: cluster });
Referenzieren von Ressourcen in einem anderen Stack
Sie können auf Ressourcen in einem anderen Stack verweisen, sofern sie in derselben App definiert sind und sich in derselben AWS Umgebung befinden. Das folgende Muster wird im Allgemeinen verwendet:
-
Speichern Sie einen Verweis auf das Konstrukt als Attribut des Stacks, der die Ressource erzeugt. (Um einen Verweis auf den Stack des aktuellen Konstrukts zu erhalten, verwenden Sie
Stack.of(this)
.) -
Übergeben Sie diese Referenz als Parameter oder Eigenschaft an den Konstruktor des Stacks, der die Ressource verbraucht. Der verbrauchende Stapel übergibt ihn dann als Eigenschaft an jedes Konstrukt, das ihn benötigt.
Das folgende Beispiel definiert einen Stapelstack1
. Dieser Stack definiert einen Amazon S3 S3-Bucket und speichert einen Verweis auf das Bucket-Konstrukt als Attribut des Stacks. Dann definiert die App einen zweiten Stackstack2
, der bei der Instanziierung einen Bucket akzeptiert. stack2
könnte zum Beispiel eine AWS Glue Tabelle definieren, die den Bucket für die Datenspeicherung verwendet.
const prod = { account: '123456789012', region: 'us-east-1' };
const stack1 = new StackThatProvidesABucket(app, 'Stack1', { env: prod });
// stack2 will take a property { bucket: IBucket }
const stack2 = new StackThatExpectsABucket(app, 'Stack2', {
bucket: stack1.bucket,
env: prod
});
Wenn der AWS CDK feststellt, dass sich die Ressource in derselben Umgebung, aber in einem anderen Stapel befindet, synthetisiert er automatisch AWS CloudFormation Exporte im produzierenden Stapel und ein Fn:: ImportValue im verbrauchenden Stapel, um diese Informationen von einem Stapel auf den anderen zu übertragen.
Behebung von Deadlocks bei Abhängigkeiten
Wenn Sie auf eine Ressource von einem Stapel in einem anderen Stapel verweisen, entsteht eine Abhängigkeit zwischen den beiden Stacks. Dadurch wird sichergestellt, dass sie in der richtigen Reihenfolge bereitgestellt werden. Nachdem die Stacks bereitgestellt wurden, ist diese Abhängigkeit konkret. Danach kann das Entfernen der Nutzung der gemeinsam genutzten Ressource aus dem verbrauchenden Stack zu einem unerwarteten Bereitstellungsfehler führen. Dies passiert, wenn zwischen den beiden Stacks eine weitere Abhängigkeit besteht, die eine Bereitstellung in derselben Reihenfolge erzwingt. Es kann auch ohne Abhängigkeit geschehen, wenn der produzierende Stack einfach vom CDK Toolkit so ausgewählt wird, dass er zuerst bereitgestellt wird. Der AWS CloudFormation Export wird aus dem produzierenden Stack entfernt, weil er nicht mehr benötigt wird. Die exportierte Ressource wird jedoch weiterhin im verbrauchenden Stack verwendet, da ihr Update noch nicht bereitgestellt wurde. Daher schlägt die Bereitstellung des Producer-Stacks fehl.
Um diesen Deadlock zu überwinden, entfernen Sie die Nutzung der gemeinsam genutzten Ressource aus dem verbrauchenden Stack. (Dadurch wird der automatische Export aus dem produzierenden Stack entfernt.) Als Nächstes fügen Sie denselben Export manuell zum Produktionsstapel hinzu und verwenden dabei genau dieselbe logische ID wie der automatisch generierte Export. Entfernen Sie die Nutzung der gemeinsam genutzten Ressource im verbrauchenden Stack und stellen Sie beide Stapel bereit. Entfernen Sie dann den manuellen Export (und die gemeinsam genutzte Ressource, falls sie nicht mehr benötigt wird) und stellen Sie beide Stapel erneut bereit. Die exportValue()
Methode des Stacks ist eine bequeme Möglichkeit, den manuellen Export für diesen Zweck zu erstellen. (Sehen Sie sich das Beispiel in der verlinkten Methodenreferenz an.)
Verweisen auf Ressourcen in Ihrem Konto AWS
Angenommen, Sie möchten eine Ressource, die bereits in Ihrem AWS Konto verfügbar ist, in Ihrer AWS CDK App verwenden. Dies kann eine Ressource sein, die über die Konsole, ein AWS SDK, direkt mit AWS CloudFormation oder in einer anderen AWS CDK Anwendung definiert wurde. Sie können den ARN der Ressource (oder ein anderes identifizierendes Attribut oder eine Gruppe von Attributen) in ein Proxy-Objekt umwandeln. Das Proxy-Objekt dient als Referenz auf die Ressource, indem es eine statische Factory-Methode für die Klasse der Ressource aufruft.
Wenn Sie einen solchen Proxy erstellen, wird die externe Ressource nicht Teil Ihrer AWS CDK App. Daher wirken sich Änderungen, die Sie am Proxy in Ihrer AWS CDK App vornehmen, nicht auf die bereitgestellte Ressource aus. Der Proxy kann jedoch an jede AWS CDK Methode übergeben werden, die eine Ressource dieses Typs benötigt.
Das folgende Beispiel zeigt, wie Sie auf einen Bucket verweisen, der auf einem vorhandenen Bucket mit dem ARN arn:aws:s3: ::amzn-s3-demo-bucket1 basiert, und auf eine Amazon Virtual Private Cloud, die auf einer vorhandenen VPC mit einer bestimmten ID basiert.
// Construct a proxy for a bucket by its name (must be same account)
s3.Bucket.fromBucketName(this, 'MyBucket', 'amzn-s3-demo-bucket1');
// Construct a proxy for a bucket by its full ARN (can be another account)
s3.Bucket.fromBucketArn(this, 'MyBucket', 'arn:aws:s3:::amzn-s3-demo-bucket1');
// Construct a proxy for an existing VPC from its attribute(s)
ec2.Vpc.fromVpcAttributes(this, 'MyVpc', {
vpcId: 'vpc-1234567890abcde',
});
Schauen wir uns die Methode genauer an. Vpc.fromLookup()
Da das ec2.Vpc
Konstrukt komplex ist, gibt es viele Möglichkeiten, die VPC auszuwählen, die mit Ihrer CDK-App verwendet werden soll. Um dieses Problem zu lösen, verfügt das VPC-Konstrukt über eine fromLookup
statische Methode (Python:from_lookup
), mit der Sie die gewünschte Amazon-VPC suchen können, indem Sie Ihr AWS Konto bei der Synthese abfragen.
Für die Verwendung muss das SystemVpc.fromLookup()
, das den Stack synthetisiert, Zugriff auf das Konto haben, dem die Amazon VPC gehört. Das liegt daran, dass das CDK Toolkit das Konto abfragt, um zum Zeitpunkt der Synthese die richtige Amazon VPC zu finden.
Darüber hinaus Vpc.fromLookup()
funktioniert es nur in Stacks, die mit einem expliziten Konto und einer Region definiert sind (siehe). Umgebungen für die AWS CDK Wenn AWS CDK versucht wird, eine Amazon-VPC aus einem umgebungsunabhängigen Stack zu suchen, weiß das CDK Toolkit nicht, welche Umgebung abgefragt werden muss, um die VPC zu finden.
Sie müssen ausreichende Vpc.fromLookup()
Attribute angeben, um eine VPC in Ihrem AWS
Konto eindeutig zu identifizieren. Beispielsweise kann es immer nur eine Standard-VPC geben, sodass es ausreichend ist, die VPC als Standard-VPC anzugeben.
ec2.Vpc.fromLookup(this, 'DefaultVpc', {
isDefault: true
});
Sie können die tags
Eigenschaft auch verwenden, um nach einem Tag abzufragen VPCs . Sie können der Amazon VPC bei ihrer Erstellung Tags hinzufügen, indem Sie AWS CloudFormation oder den AWS CDK verwenden. Sie können Tags jederzeit nach der Erstellung bearbeiten, indem Sie das AWS Management Console AWS CLI, oder ein AWS SDK verwenden. Zusätzlich zu allen Tags, die Sie selbst hinzufügen, fügt das AWS CDK automatisch die folgenden Tags zu allen erstellten Tags VPCs hinzu.
-
Name — Der Name der VPC.
-
aws-cdk:subnet-name — Der Name des Subnetzes.
-
aws-cdk:subnet-type — Der Typ des Subnetzes: Öffentlich, Privat oder Isoliert.
ec2.Vpc.fromLookup(this, 'PublicVpc',
{tags: {'aws-cdk:subnet-type': "Public"}});
Die Ergebnisse von Vpc.fromLookup()
werden in der Projektdatei zwischengespeichert. cdk.context.json
(Siehe Kontextwerte und AWS CDK). Übergeben Sie diese Datei der Versionskontrolle, damit Ihre App weiterhin auf dieselbe Amazon VPC verweist. Dies funktioniert auch dann, wenn Sie später Ihre VPCs Attribute so ändern, dass eine andere VPC ausgewählt wird. Dies ist besonders wichtig, wenn Sie den Stack in einer Umgebung bereitstellen, die keinen Zugriff auf das AWS Konto hat, das die VPC definiert, z. B. CDK Pipelines.
Sie können eine externe Ressource zwar überall verwenden, wo Sie eine ähnliche, in Ihrer AWS CDK App definierte Ressource verwenden würden, aber Sie können sie nicht ändern. Zum Beispiel bewirkt der Aufruf von addToResourcePolicy
(Python:add_to_resource_policy
) auf einem externen s3.Bucket
Gerät nichts.
Physische Namen der Ressourcen
Die logischen Namen der Ressourcen in AWS CloudFormation unterscheiden sich von den Namen der Ressourcen, die AWS Management Console nach ihrer Bereitstellung von angezeigt werden AWS CloudFormation. Er AWS CDK nennt diese endgültigen Namen physische Namen.
AWS CloudFormation Könnte beispielsweise den Amazon S3 S3-Bucket mit der logischen ID Stack2MyBucket4DD88B4F
und dem physischen Namen erstellenstack2MyBucket4dd88b4f-iuv1rbv9z3to
.
Sie können einen physischen Namen angeben, wenn Sie Konstrukte erstellen, die Ressourcen darstellen, indem Sie die Eigenschaft <resourceType>
Name verwenden. Im folgenden Beispiel wird ein Amazon S3 S3-Bucket mit dem physischen Namen erstelltamzn-s3-demo-bucket
.
const bucket = new s3.Bucket(this, 'MyBucket', {
bucketName: 'amzn-s3-demo-bucket',
});
Die Zuweisung physischer Namen zu Ressourcen hat einige Nachteile in AWS CloudFormation. Am wichtigsten ist jedoch, dass alle Änderungen an bereitgestellten Ressourcen, die einen Austausch von Ressourcen erfordern, wie z. B. Änderungen an den Eigenschaften einer Ressource, die nach der Erstellung unveränderlich sind, fehlschlagen, wenn einer Ressource ein physischer Name zugewiesen wurde. Wenn Sie in diesem Zustand landen, besteht die einzige Lösung darin, den AWS CloudFormation Stack zu löschen und die AWS CDK App dann erneut bereitzustellen. Einzelheiten finden Sie in der AWS CloudFormation Dokumentation.
In einigen Fällen, z. B. beim Erstellen einer AWS CDK App mit umgebungsübergreifenden Verweisen, sind physische Namen erforderlich, AWS CDK damit sie ordnungsgemäß funktioniert. In diesen Fällen können Sie, wenn Sie sich nicht selbst die Mühe machen möchten, einen physischen Namen zu finden, den AWS CDK Namen für Sie selbst festlegen lassen. Verwenden Sie dazu den speziellen Wert PhysicalName.GENERATE_IF_NEEDED
wie folgt.
const bucket = new s3.Bucket(this, 'MyBucket', {
bucketName: core.PhysicalName.GENERATE_IF_NEEDED,
});
Übergeben von eindeutigen Ressourcen-Identifikatoren
Wann immer möglich, sollten Sie Ressourcen als Referenz übergeben, wie im vorherigen Abschnitt beschrieben. Es gibt jedoch Fälle, in denen Sie keine andere Wahl haben, als mit einem ihrer Attribute auf eine Ressource zu verweisen. Zu den beispielhaften Anwendungsfällen gehören die folgenden:
-
Wenn Sie AWS CloudFormation Ressourcen auf niedriger Ebene verwenden.
-
Wenn Sie Ressourcen für die Laufzeitkomponenten einer AWS CDK Anwendung verfügbar machen müssen, z. B. wenn Sie über Umgebungsvariablen auf Lambda-Funktionen verweisen.
Diese Bezeichner sind als Attribute für die Ressourcen verfügbar, wie z. B. die folgenden.
bucket.bucketName lambdaFunc.functionArn securityGroup.groupArn
Das folgende Beispiel zeigt, wie ein generierter Bucket-Name an eine AWS Lambda Funktion übergeben wird.
const bucket = new s3.Bucket(this, 'Bucket');
new lambda.Function(this, 'MyLambda', {
// ...
environment: {
BUCKET_NAME: bucket.bucketName,
},
});
Erteilen von Berechtigungen zwischen Ressourcen
Konstrukte auf höherer Ebene ermöglichen die Erzielung von Berechtigungen mit den geringsten Rechten, indem sie einfache, absichtsbasierte bis ausdrückliche Berechtigungsanforderungen anbieten. APIs Viele L2-Konstrukte bieten beispielsweise Erteilungsmethoden, mit denen Sie einer Entität (z. B. einer IAM-Rolle oder einem IAM-Benutzer) die Erlaubnis erteilen können, mit der Ressource zu arbeiten, ohne IAM-Berechtigungsanweisungen manuell erstellen zu müssen.
Im folgenden Beispiel werden die Berechtigungen erstellt, die es der Ausführungsrolle einer Lambda-Funktion ermöglichen, Objekte in einen bestimmten Amazon S3 S3-Bucket zu lesen und zu schreiben. Wenn der Amazon S3 S3-Bucket mit einem AWS KMS Schlüssel verschlüsselt ist, gewährt diese Methode auch der Ausführungsrolle der Lambda-Funktion die Erlaubnis, mit dem Schlüssel zu entschlüsseln.
if (bucket.grantReadWrite(func).success) {
// ...
}
Die Grant-Methoden geben ein iam.Grant
Objekt zurück. Verwenden Sie das success
Attribut des Grant
Objekts, um festzustellen, ob der Zuschuss tatsächlich gewährt wurde (z. B. wurde er möglicherweise nicht auf externe Ressourcen angewendet). Sie können auch die Methode assertSuccess
(Python:assert_success
) des Grant
Objekts verwenden, um zu erzwingen, dass der Zuschuss erfolgreich beantragt wurde.
Wenn eine bestimmte Grant-Methode für den jeweiligen Anwendungsfall nicht verfügbar ist, können Sie eine generische Grant-Methode verwenden, um einen neuen Zuschuss mit einer bestimmten Liste von Aktionen zu definieren.
Das folgende Beispiel zeigt, wie einer Lambda-Funktion Zugriff auf die Amazon DynamoDB CreateBackup
DynamoDB-Aktion gewährt wird.
table.grant(func, 'dynamodb:CreateBackup');
Für viele Ressourcen, wie z. B. Lambda-Funktionen, muss bei der Ausführung von Code eine Rolle übernommen werden. Mit einer Konfigurationseigenschaft können Sie eine iam.IRole
angeben. Wenn keine Rolle angegeben ist, erstellt die Funktion automatisch eine Rolle speziell für diesen Zweck. Anschließend können Sie Grant-Methoden für die Ressourcen verwenden, um der Rolle Anweisungen hinzuzufügen.
Die Grant-Methoden basieren auf untergeordneten Ebenen APIs für den Umgang mit IAM-Richtlinien. Richtlinien werden als Objekte modelliert. PolicyDocument Fügen Sie mithilfe der Methode (Python:) Anweisungen direkt zu Rollen (oder der angehängten Rolle eines Konstruktsadd_to_role_policy
) oder mit der addToRolePolicy
Methode (Python:) zur Bucket
Richtlinie einer Ressource addToResourcePolicy
(z. B. einer Richtlinieadd_to_resource_policy
) hinzu.
Metriken und Alarme für Ressourcen
Viele Ressourcen geben CloudWatch Metriken aus, mit denen Überwachungs-Dashboards und Alarme eingerichtet werden können. Konstrukte auf höherer Ebene verfügen über metrische Methoden, mit denen Sie auf die Metriken zugreifen können, ohne nach dem richtigen Namen suchen zu müssen.
Das folgende Beispiel zeigt, wie ein Alarm definiert wird, wenn ApproximateNumberOfMessagesNotVisible
der Wert einer Amazon SQS SQS-Warteschlange 100 überschreitet.
import * as cw from '@aws-cdk/aws-cloudwatch';
import * as sqs from '@aws-cdk/aws-sqs';
import { Duration } from '@aws-cdk/core';
const queue = new sqs.Queue(this, 'MyQueue');
const metric = queue.metricApproximateNumberOfMessagesNotVisible({
label: 'Messages Visible (Approx)',
period: Duration.minutes(5),
// ...
});
metric.createAlarm(this, 'TooManyMessagesAlarm', {
comparisonOperator: cw.ComparisonOperator.GREATER_THAN_THRESHOLD,
threshold: 100,
// ...
});
Wenn es für eine bestimmte Metrik keine Methode gibt, können Sie die allgemeine Metrikmethode verwenden, um den Metriknamen manuell anzugeben.
Metriken können auch zu CloudWatch Dashboards hinzugefügt werden. Siehe CloudWatch.
Netzwerkdatenverkehr
In vielen Fällen müssen Sie Berechtigungen in einem Netzwerk aktivieren, damit eine Anwendung funktioniert, z. B. wenn die Recheninfrastruktur auf die Persistenzschicht zugreifen muss. Ressourcen, die Verbindungen herstellen oder darauf warten, stellen Methoden zur Verfügung, die den Datenfluss ermöglichen, einschließlich der Festlegung von Sicherheitsgruppenregeln oder dem Netzwerk ACLs.
IConnectableRessourcen verfügen über eine connections
Eigenschaft, bei der es sich um das Gateway zur Konfiguration der Regeln für den Netzwerkverkehr handelt.
Mithilfe von allow
Methoden ermöglichen Sie den Datenfluss auf einem bestimmten Netzwerkpfad. Das folgende Beispiel aktiviert HTTPS-Verbindungen zum Internet und eingehende Verbindungen von der Amazon EC2 Auto Scaling Scaling-Gruppefleet2
.
import * as asg from '@aws-cdk/aws-autoscaling';
import * as ec2 from '@aws-cdk/aws-ec2';
const fleet1: asg.AutoScalingGroup = asg.AutoScalingGroup(/*...*/);
// Allow surfing the (secure) web
fleet1.connections.allowTo(new ec2.Peer.anyIpv4(), new ec2.Port({ fromPort: 443, toPort: 443 }));
const fleet2: asg.AutoScalingGroup = asg.AutoScalingGroup(/*...*/);
fleet1.connections.allowFrom(fleet2, ec2.Port.AllTraffic());
Bestimmten Ressourcen sind Standardports zugeordnet. Beispiele hierfür sind der Listener eines Load Balancers auf dem öffentlichen Port und die Ports, auf denen die Datenbank-Engine Verbindungen für Instances einer Amazon RDS-Datenbank akzeptiert. In solchen Fällen können Sie eine strenge Netzwerkkontrolle erzwingen, ohne den Port manuell angeben zu müssen. Verwenden Sie dazu die allowToDefaultPort
Methoden allowDefaultPortFrom
und (Python:allow_default_port_from
,allow_to_default_port
).
Das folgende Beispiel zeigt, wie Verbindungen von einer beliebigen IPV4 Adresse und eine Verbindung von einer Auto Scaling Scaling-Gruppe aus für den Zugriff auf eine Datenbank aktiviert werden.
listener.connections.allowDefaultPortFromAnyIpv4('Allow public access');
fleet.connections.allowToDefaultPort(rdsDatabase, 'Fleet can access database');
Behandlung von Ereignissen
Einige Ressourcen können als Ereignisquellen dienen. Verwenden Sie die addEventNotification
Methode (Python:add_event_notification
), um ein Ereignisziel für einen bestimmten Ereignistyp zu registrieren, der von der Ressource ausgegeben wird. Darüber hinaus bieten addXxxNotification
Methoden eine einfache Möglichkeit, einen Handler für gängige Ereignistypen zu registrieren.
Das folgende Beispiel zeigt, wie eine Lambda-Funktion ausgelöst wird, wenn ein Objekt zu einem Amazon S3 S3-Bucket hinzugefügt wird.
import * as s3nots from '@aws-cdk/aws-s3-notifications';
const handler = new lambda.Function(this, 'Handler', { /*…*/ });
const bucket = new s3.Bucket(this, 'Bucket');
bucket.addObjectCreatedNotification(new s3nots.LambdaDestination(handler));
Richtlinien zur Entfernung
Für Ressourcen, die persistente Daten verwalten, wie Datenbanken, Amazon S3 S3-Buckets und Amazon ECR-Registries, gilt eine Entfernungsrichtlinie. Die Entfernungsrichtlinie gibt an, ob persistente Objekte gelöscht werden sollen, wenn der AWS CDK
Stapel, der sie enthält, zerstört wird. Die Werte, die die Entfernungsrichtlinie angeben, sind über die RemovalPolicy
Aufzählung im AWS CDK core
Modul verfügbar.
Anmerkung
Neben Ressourcen, die Daten dauerhaft speichern, können auch Ressourcen eine habenremovalPolicy
, die für einen anderen Zweck verwendet wird. Beispielsweise verwendet eine Lambda-Funktionsversion ein removalPolicy
Attribut, um zu bestimmen, ob eine bestimmte Version beibehalten wird, wenn eine neue Version bereitgestellt wird. Diese haben im Vergleich zu den Entfernungsrichtlinien für einen Amazon S3 S3-Bucket oder eine DynamoDB-Tabelle unterschiedliche Bedeutungen und Standardeinstellungen.
Wert | Bedeutung |
---|---|
|
Behält den Inhalt der Ressource bei, wenn der Stapel zerstört wird (Standard). Die Ressource ist aus dem Stapel verwaist und muss manuell gelöscht werden. Wenn Sie versuchen, den Stack erneut bereitzustellen, während die Ressource noch vorhanden ist, erhalten Sie aufgrund eines Namenskonflikts eine Fehlermeldung. |
|
Die Ressource wird zusammen mit dem Stapel zerstört. |
AWS CloudFormation entfernt keine Amazon S3 S3-Buckets, die Dateien enthalten, auch wenn ihre Entfernungsrichtlinie auf DESTROY
eingestellt ist. Der Versuch, dies zu tun, ist ein AWS CloudFormation Fehler. Damit alle Dateien aus dem Bucket AWS CDK gelöscht werden, bevor er zerstört wird, setzen Sie die autoDeleteObjects
Eigenschaft des Buckets auftrue
.
Im Folgenden finden Sie ein Beispiel für die Erstellung eines Amazon S3 S3-Buckets mit RemovalPolicy
der Einstellung of DESTROY
und der autoDeleteOjbects
Einstellung auftrue
.
import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
export class CdkTestStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const bucket = new s3.Bucket(this, 'Bucket', {
removalPolicy: cdk.RemovalPolicy.DESTROY,
autoDeleteObjects: true
});
}
}
Sie können mithilfe der applyRemovalPolicy()
Methode auch eine Entfernungsrichtlinie direkt auf die zugrunde liegende AWS CloudFormation Ressource anwenden. Diese Methode ist für einige statusbehaftete Ressourcen verfügbar, die keine removalPolicy
Eigenschaft in den Requisiten ihrer L2-Ressource haben. Beispiele sind unter anderem:
-
AWS CloudFormation stapelt
-
Amazon-Cognito-Benutzerpools
-
Amazon DocumentDB DocumentDB-Datenbank-Instances
-
EC2 Amazon-Volumen
-
Amazon OpenSearch Service-Domänen
-
FSx Amazon-Dateisysteme
-
Amazon SQS-Warteschlangen
const resource = bucket.node.findChild('Resource') as cdk.CfnResource;
resource.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
Anmerkung
Das „ AWS CDK s“ RemovalPolicy
heißt übersetzt „ AWS CloudFormation s“DeletionPolicy
. Die Standardeinstellung besteht jedoch AWS CDK darin, die Daten beizubehalten, was das Gegenteil der AWS CloudFormation Standardeinstellung ist.