Drapeaux de fonctionnalités dans l’AWS CDK #
Les drapeaux de fonctionnalités sont des paires clé-valeur qui nous permettent d’accepter ou de refuser les changements de rupture introduits en dehors des versions majeures d’un CDK AWS.
changements de rupture, introduits en dehors des versions majeures d’un paquet AWS CDK.
AWS.
Les drapeaux de fonctionnalités permettent à l’équipe AWS CDK d’implémenter des fonctionnalités qui apportent des
sans attendre la sortie d’une version majeure.
En changeant la valeur booléenne d’un indicateur de fonctionnalité en false
nous annulons le comportement
comportement du paquet CDK spécifique.
Nous gérons les drapeaux de fonctionnalités dans la section cdk.json
dans le répertoire racine de notre
projet.
Voici un exemple de la façon dont un cdk.json
qui contient des drapeaux de caractéristiques.
{
"app": "npx ts-node --prefer-ts-exts infra/app.ts",
"context": {
"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": false,
"@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": false,
"@aws-cdk/aws-rds:lowercaseDbIdentifier": false,
"@aws-cdk/core:stackRelativeExports": false
}
}
Nous avons d’abord le app
qui correspond à une commande qui indique au CDK CLI
comment exécuter notre code. Dans le cas présent, comme j’utilise TypeScript, le code sera
sera compilé en javascript en utilisant ts-node
.
Ensuite, nous avons la clé contextuelle
clé de contexte, qui correspond
à un objet, contenant différents drapeaux de caractéristiques.
Nous pouvons voir qu’il y a un modèle dans les noms des drapeaux de fonctionnalités – ils
commencent par le nom du paquet qui introduit le changement de rupture – par
exemple @aws-cdk/aws-rds
.
Pour revenir à une fonctionnalité spécifique et rétablir l’ancien comportement, nous pouvons définir l’indicateur de fonctionnalité correspondant comme suit
l’indicateur de fonctionnalité correspondant à false
.
Comme la plupart des indicateurs de fonctionnalité sont des corrections de bogues nécessaires ou des améliorations qui introduisent des changements de rupture, le fait de définir un indicateur de fonctionnalité spécifique à false
signifie que nous conservons le comportement précédent du paquet CDK, ainsi que la limitation.
Le comportement par défaut est le suivant : lorsque nous initialisons une application CDK à l’aide de la fonction
cdk init
tous les indicateurs de fonctionnalité sont définis sur true
.
npx aws-cdk init --language typescript
La fonctionnalité de drapeaux de fonctionnalités permet à l’équipe AWS CDK d’introduire des
changements de rupture, en dehors des versions majeures, et de mettre par défaut les drapeaux de
par défaut sur false pour les projets existants.
Les projets existants ne sont pas affectés par les changements de rupture, sauf s’ils définissent explicitement le drapeau de fonctionnalité à true
.
Sur un projet existant, nous pouvons choisir les fonctionnalités et les changements de rupture que nous voulons introduire, en configurant les paires de valeurs clés dans notre base de données.
que nous souhaitons introduire, en configurant les paires clé-valeur dans notre fichier
cdk.json
fichier.
Accès aux valeurs du Feature Flag dans notre code CDK #
Afin d’accéder à la valeur d’un indicateur de fonctionnalité, nous devons utiliser la fonction
FeatureFlags
classe.
Utilisons la classe isEnabled
sur la méthode FeatureFlags
et affiche les valeurs
valeurs dans la console :
import * as cdk from 'aws-cdk-lib';
export class MyCdkStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
console.log(
'apig usage plan key order insensitive id ????',
cdk.FeatureFlags.of(this).isEnabled(
'@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId',
),
);
console.log(
'aws rds lowercaseDbIdentifier ????',
cdk.FeatureFlags.of(this).isEnabled(
'@aws-cdk/aws-rds:lowercaseDbIdentifier',
),
);
}
}
Dans l’extrait ci-dessus, nous appelons la classe isEnabled
en passant par le nom de l’indicateur
de la caractéristique.
Pour les besoins de la démonstration, je vais définir la valeur de l’option
@aws-cdk/aws-rds:lowercaseDbIdentifier
à true
dans le cdk.json
dossier :
{
"app": "npx ts-node --prefer-ts-exts infra/app.ts",
"context": {
"@aws-cdk/aws-secretsmanager:parseOwnedSecretName": false,
"@aws-cdk/aws-rds:lowercaseDbIdentifier": true
}
}
Synthétisons notre pile cdk :
Si nous regardons maintenant la sortie de notre console.log
nous obtenons :
Conclusion #
Les drapeaux de fonctionnalités permettent à l’équipe CDK d’AWS d’introduire des
sans attendre les versions majeures de CDK.
Pour un projet existant, les drapeaux de fonctionnalités auront par défaut la valeur suivante false
ce qui signifie que
qu’il n’y aura pas de changement de rupture, mais nous ne serons pas non plus opté pour
amélioration de la fonctionnalité ou la correction de bogue qui a été introduite.
Afin de voir si des changements de rupture ont été introduits dans une version particulière
particulière d’un paquet CDK, nous pouvons consulter le journal des modifications.