Ceci est le guide du AWS CDK développeur de la version 2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Les actifs sont des fichiers locaux, des répertoires ou des images Docker qui peuvent être regroupés dans des AWS CDK bibliothèques et des applications. Par exemple, un actif peut être un répertoire contenant le code du gestionnaire d'une AWS Lambda fonction. Les actifs peuvent représenter n'importe quel artefact dont l'application a besoin pour fonctionner.
Le didacticiel vidéo suivant fournit un aperçu complet des actifs du CDK et explique comment les utiliser dans votre infrastructure en tant que code (iAc).
Vous ajoutez des actifs APIs qui sont exposés par des AWS constructions spécifiques. Par exemple, lorsque vous définissez une construction Lambda.Function, la propriété code vous permet de transmettre un actif (répertoire). Function
utilise des actifs pour regrouper le contenu du répertoire et l'utiliser pour le code de la fonction. De même, ecs. ContainerImage.fromAsset utilise une image Docker créée à partir d'un répertoire local lors de la définition d'une tâche Amazon ECS.
Les actifs en détail
Lorsque vous faites référence à un actif dans votre application, l'assemblage cloud synthétisé à partir de votre application inclut des informations de métadonnées ainsi que des instructions pour la AWS CDK CLI. Les instructions indiquent où trouver la ressource sur le disque local et quel type de regroupement effectuer en fonction du type de ressource, par exemple un répertoire à compresser (zip) ou une image Docker à créer.
AWS CDK Génère un hachage source pour les actifs. Cela peut être utilisé au moment de la construction pour déterminer si le contenu d'un actif a changé.
Par défaut, AWS CDK crée une copie de la ressource dans le répertoire d'assemblage du cloud, qui est par défautcdk.out
, sous le hachage source. Ainsi, l'assemblage du cloud est autonome. Ainsi, s'il est déplacé vers un autre hôte pour le déploiement, il peut toujours être déployé. Consultez Assemblages cloud pour plus de détails.
Lors du AWS CDK déploiement d'une application qui référence des actifs (soit directement par le code de l'application, soit par le biais d'une bibliothèque), la AWS CDK CLI prépare et publie d'abord les actifs dans un compartiment Amazon S3 ou un référentiel Amazon ECR. (Le compartiment ou le référentiel S3 est créé pendant le démarrage.) Ce n'est qu'alors que les ressources définies dans la pile sont déployées.
Cette section décrit le bas niveau APIs disponible dans le framework.
Types d'actifs
Il AWS CDK prend en charge les types d'actifs suivants :
- Ressources Amazon S3
-
Il s'agit de fichiers et de répertoires locaux qu'ils AWS CDK téléchargent sur Amazon S3.
- Image Docker
-
Il s'agit d'images Docker qu'ils AWS CDK téléchargent sur Amazon ECR.
Ces types d'actifs sont expliqués dans les sections suivantes.
Ressources Amazon S3
Vous pouvez définir les fichiers et les répertoires locaux en tant qu'actifs, ainsi que les AWS CDK packages et les télécharger sur Amazon S3 via le module aws-s3-assets.
L'exemple suivant définit un actif de répertoire local et un actif de fichier.
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
// Archived and uploaded to Amazon S3 as a .zip file
const directoryAsset = new Asset(this, "SampleZippedDirAsset", {
path: path.join(__dirname, "sample-asset-directory")
});
// Uploaded to Amazon S3 as-is
const fileAsset = new Asset(this, 'SampleSingleFileAsset', {
path: path.join(__dirname, 'file-asset.txt')
});
Dans la plupart des cas, il n'est pas nécessaire de l'utiliser directement APIs dans le aws-s3-assets
module. Les modules qui prennent en charge des actifs, tels queaws-lambda
, disposent de méthodes pratiques qui vous permettent d'utiliser des actifs. Pour les fonctions Lambda, la méthode statique fromAsset () vous permet de spécifier un répertoire ou un fichier .zip dans le système de fichiers local.
Exemple de fonction Lambda
Un cas d'utilisation courant consiste à créer des fonctions Lambda avec le code du gestionnaire en tant que ressource Amazon S3.
L'exemple suivant utilise une ressource Amazon S3 pour définir un gestionnaire Python dans le répertoire handler
local. Il crée également une fonction Lambda avec l'actif du répertoire local comme propriété. code
Voici le code Python du gestionnaire.
def lambda_handler(event, context):
message = 'Hello World!'
return {
'message': message
}
Le code de l' AWS CDK application principale doit ressembler à ce qui suit.
import * as cdk from 'aws-cdk-lib';
import { Constructs } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as path from 'path';
export class HelloAssetStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new lambda.Function(this, 'myLambdaFunction', {
code: lambda.Code.fromAsset(path.join(__dirname, 'handler')),
runtime: lambda.Runtime.PYTHON_3_6,
handler: 'index.lambda_handler'
});
}
}
La Function
méthode utilise des actifs pour regrouper le contenu du répertoire et l'utiliser pour le code de la fonction.
Astuce
Les .jar
fichiers Java sont des fichiers ZIP dotés d'une extension différente. Ils sont chargés tels quels sur Amazon S3, mais lorsqu'ils sont déployés en tant que fonction Lambda, les fichiers qu'ils contiennent sont extraits, ce que vous ne souhaitez peut-être pas. Pour éviter cela, placez le .jar
fichier dans un répertoire et spécifiez ce répertoire comme ressource.
Exemple d'attributs relatifs au moment du déploiement
Les types d'actifs Amazon S3 présentent également des attributs de temps de déploiement qui peuvent être référencés dans AWS CDK les bibliothèques et les applications. La commande AWS CDK CLI cdk synth affiche les propriétés des actifs sous forme de AWS CloudFormation paramètres.
L'exemple suivant utilise des attributs de temps de déploiement pour transmettre l'emplacement d'une ressource d'image à une fonction Lambda sous forme de variables d'environnement. (Le type de fichier n'a pas d'importance ; l'image PNG utilisée ici n'est qu'un exemple.)
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
import * as path from 'path';
const imageAsset = new Asset(this, "SampleAsset", {
path: path.join(__dirname, "images/my-image.png")
});
new lambda.Function(this, "myLambdaFunction", {
code: lambda.Code.asset(path.join(__dirname, "handler")),
runtime: lambda.Runtime.PYTHON_3_6,
handler: "index.lambda_handler",
environment: {
'S3_BUCKET_NAME': imageAsset.s3BucketName,
'S3_OBJECT_KEY': imageAsset.s3ObjectKey,
'S3_OBJECT_URL': imageAsset.s3ObjectUrl
}
});
Autorisations
Si vous utilisez des actifs Amazon S3 directement via le module aws-s3-assets, des rôles, des utilisateurs ou des groupes IAM, et que vous devez lire des actifs pendant l'exécution, accordez-leur des autorisations IAM via la méthode Asset.grantRead.
L'exemple suivant accorde à un groupe IAM des autorisations de lecture sur une ressource de fichier.
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
import * as path from 'path';
const asset = new Asset(this, 'MyFile', {
path: path.join(__dirname, 'my-image.png')
});
const group = new iam.Group(this, 'MyUserGroup');
asset.grantRead(group);
Ressources d'image Docker
AWS CDK Supporte le regroupement d'images Docker locales en tant que ressources via le aws-ecr-assetsmodule.
L'exemple suivant définit une image Docker créée localement et transmise à Amazon ECR. Les images sont créées à partir d'un répertoire contextuel Docker local (avec un Dockerfile) et téléchargées sur Amazon ECR par la AWS CDK CLI ou le pipeline CI/CD de votre application. Les images peuvent être naturellement référencées dans votre AWS CDK application.
import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';
const asset = new DockerImageAsset(this, 'MyBuildImage', {
directory: path.join(__dirname, 'my-image')
});
Le my-image
répertoire doit inclure un Dockerfile. La AWS CDK CLI crée une image Docker à partir de celle-cimy-image
, l'envoie vers un référentiel Amazon ECR et spécifie le nom du référentiel en tant que AWS CloudFormation
paramètre de votre pile. Les types de ressources d'image Docker exposent des attributs de temps de déploiement qui peuvent être référencés dans les AWS CDK bibliothèques et les applications. La commande AWS CDK CLI cdk
synth affiche les propriétés des actifs sous forme de AWS CloudFormation paramètres.
Exemple de définition de tâche Amazon ECS
Un cas d'utilisation courant consiste à créer un Amazon ECS TaskDefinitionpour exécuter des conteneurs Docker. L'exemple suivant indique l'emplacement d'une ressource d'image Docker créée localement AWS CDK et transmise à Amazon ECR.
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets';
import * as path from 'path';
const taskDefinition = new ecs.FargateTaskDefinition(this, "TaskDef", {
memoryLimitMiB: 1024,
cpu: 512
});
const asset = new ecr_assets.DockerImageAsset(this, 'MyBuildImage', {
directory: path.join(__dirname, 'my-image')
});
taskDefinition.addContainer("my-other-container", {
image: ecs.ContainerImage.fromDockerImageAsset(asset)
});
Exemple d'attributs relatifs au moment du déploiement
L'exemple suivant montre comment utiliser les attributs de temps de déploiement repository
et comment imageUri
créer une définition de tâche Amazon ECS avec le type de AWS Fargate lancement. Notez que la recherche du dépôt Amazon ECR nécessite la balise de l'image, et non son URI. Nous l'extrayons donc à la fin de l'URI de la ressource.
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as path from 'path';
import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';
const asset = new DockerImageAsset(this, 'my-image', {
directory: path.join(__dirname, "..", "demo-image")
});
const taskDefinition = new ecs.FargateTaskDefinition(this, "TaskDef", {
memoryLimitMiB: 1024,
cpu: 512
});
taskDefinition.addContainer("my-other-container", {
image: ecs.ContainerImage.fromEcrRepository(asset.repository, asset.imageUri.split(":").pop())
});
Exemple d'arguments de construction
Vous pouvez fournir des arguments de construction personnalisés pour l'étape de construction de Docker via l'option de propriété buildArgs
(Python :build_args
) lorsque la AWS CDK CLI crée l'image pendant le déploiement.
const asset = new DockerImageAsset(this, 'MyBuildImage', {
directory: path.join(__dirname, 'my-image'),
buildArgs: {
HTTP_PROXY: 'http://10.20.30.2:1234'
}
});
Autorisations
Si vous utilisez un module qui prend en charge les actifs d'image Docker, tel que aws-ecs, il AWS CDK gère les autorisations pour vous lorsque vous utilisez les actifs directement ou via. ContainerImage fromEcrRepository (Python :from_ecr_repository
). Si vous utilisez directement les ressources d'image Docker, assurez-vous que le principal utilisateur est autorisé à extraire l'image.
Dans la plupart des cas, vous devez utiliser la méthode Asset.repository.GrantPull (Python :. grant_pull
Cela modifie la politique IAM du principal pour lui permettre d'extraire des images de ce référentiel. Si le principal qui extrait l'image n'appartient pas au même compte, ou s'il s'agit d'un AWS service qui n'assume aucun rôle dans votre compte (par exemple AWS CodeBuild), vous devez accorder des autorisations d'extraction conformément à la politique de ressources et non à la politique du principal. Utilisez le fichier asset.repository. addToResourceMéthode de politique (Python :add_to_resource_policy
) pour accorder les autorisations principales appropriées.
AWS CloudFormation métadonnées des ressources
Note
Cette section ne concerne que les auteurs de constructions. Dans certaines situations, les outils doivent savoir qu'une certaine ressource CFN utilise un actif local. Par exemple, vous pouvez utiliser la AWS SAM CLI pour appeler des fonctions Lambda localement à des fins de débogage. Consultez AWS SAM intégration pour plus de détails.
Pour permettre de tels cas d'utilisation, les outils externes consultent un ensemble d'entrées de métadonnées sur les AWS CloudFormation ressources :
-
aws:asset:path
— Pointe vers le chemin local de la ressource. -
aws:asset:property
— Le nom de la propriété de ressource dans laquelle l'actif est utilisé.
À l'aide de ces deux entrées de métadonnées, les outils peuvent identifier que les actifs sont utilisés par une certaine ressource et permettre des expériences locales avancées.
Pour ajouter ces entrées de métadonnées à une ressource, utilisez la méthode asset.addResourceMetadata
(Python :add_resource_metadata
).