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.
Dans ce didacticiel, vous apprendrez à créer, tester et déployer une application sans serveur sous forme de CloudFormation pile à l'aide d'un flux de travail.
L'application présentée dans ce didacticiel est une simple application Web qui produit un message « Hello World ». Il se compose d'une AWS Lambda fonction et d'un Amazon API Gateway, et vous le créez à l'aide de AWS Serverless Application Model (AWS SAM), qui est une extension de AWS CloudFormation.
Rubriques
Prérequis
Avant de commencer :
-
Vous avez besoin d'un CodeCatalyst espace avec un AWS compte connecté. Pour de plus amples informations, veuillez consulter Création d'un espace.
-
Dans votre espace, vous avez besoin d'un projet vide appelé :
codecatalyst-cfn-project
Utilisez l'option Partir de zéro pour créer ce projet.
Pour de plus amples informations, veuillez consulter Création d'un projet vide dans Amazon CodeCatalyst.
-
Dans votre projet, vous avez besoin d'un CodeCatalyst environnement appelé :
codecatalyst-cfn-environment
Configurez cet environnement comme suit :
-
Choisissez n'importe quel type, tel que Non-production.
-
AWS Connectez-y votre compte.
-
Pour le rôle IAM par défaut, choisissez n'importe quel rôle. Vous spécifierez un autre rôle ultérieurement.
Pour de plus amples informations, veuillez consulter Déploiement dans Comptes AWS et VPCs.
-
Étape 1 : Création d'un référentiel source
Au cours de cette étape, vous créez un référentiel source dans CodeCatalyst. Ce référentiel est utilisé pour stocker les fichiers sources du didacticiel, tels que le fichier de fonction Lambda.
Pour plus d'informations sur les référentiels sources, consultezCréation d'un référentiel source.
Pour créer un référentiel source
-
Dans CodeCatalyst le volet de navigation, sélectionnez Code, puis sélectionnez Référentiels sources.
-
Choisissez Ajouter un référentiel, puis sélectionnez Créer un référentiel.
-
Dans Nom du référentiel, entrez :
codecatalyst-cfn-source-repository
-
Sélectionnez Create (Créer).
Vous venez de créer un dépôt appelécodecatalyst-cfn-source-repository
.
Étape 2 : créer des AWS rôles
Au cours de cette étape, vous allez créer les rôles AWS IAM suivants :
-
Rôle de déploiement : accorde à l'action CodeCatalyst Deploy AWS CloudFormation Stack l'autorisation d'accéder à votre AWS compte et au CloudFormation service sur lesquels vous déploierez votre application sans serveur. L'action Deploy AWS CloudFormation stack fait partie de votre flux de travail.
-
Rôle de création : accorde à l'action de CodeCatalyst création l'autorisation d'accéder à votre AWS compte et d'écrire sur Amazon S3 où votre package d'application sans serveur sera stocké. L'action de création fait partie de votre flux de travail.
-
Rôle Stack : CloudFormation autorise la lecture et la modification des ressources spécifiées dans le AWS SAM modèle que vous fournirez ultérieurement. Accorde également l'autorisation de CloudWatch.
Pour plus d'informations sur les rôles IAM, consultez la section Rôles IAM dans le Guide de l'AWS Identity and Access Management utilisateur.
Note
Pour gagner du temps, vous pouvez créer un seul rôle, appelé CodeCatalystWorkflowDevelopmentRole-
rôle, au lieu des trois rôles répertoriés précédemment. Pour de plus amples informations, veuillez consulter Création du CodeCatalystWorkflowDevelopmentRole-spaceNamerôle pour votre compte et votre espace. Sachez que le spaceName
CodeCatalystWorkflowDevelopmentRole-
rôle dispose d'autorisations très étendues qui peuvent présenter un risque de sécurité. Nous vous recommandons de n'utiliser ce rôle que dans les didacticiels et les scénarios où la sécurité est moins préoccupante. Ce didacticiel part du principe que vous créez les trois rôles répertoriés précédemment.spaceName
Note
Un rôle d'exécution Lambda est également requis, mais vous n'avez pas besoin de le créer maintenant car le sam-template.yml
fichier le crée pour vous lorsque vous exécutez le flux de travail à l'étape 5.
Pour créer un rôle de déploiement
-
Créez une politique pour le rôle, comme suit :
-
Connectez-vous à AWS.
Ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/
. -
Dans le volet de navigation, choisissez Politiques.
-
Sélectionnez Create policy (Créer une politique).
-
Choisissez l'onglet JSON.
-
Supprimez le code existant.
-
Collez le code suivant :
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:Describe*", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:List*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
Note
La première fois que le rôle est utilisé pour exécuter des actions de flux de travail, utilisez le caractère générique dans la déclaration de politique de ressources, puis définissez la stratégie avec le nom de la ressource une fois celle-ci disponible.
"Resource": "*"
-
Choisissez Suivant : Balises.
-
Choisissez Suivant : Vérification.
-
Dans Nom, entrez :
codecatalyst-deploy-policy
-
Choisissez Create Policy (Créer une politique).
Vous venez de créer une politique d'autorisation.
-
-
Créez le rôle de déploiement comme suit :
-
Dans le volet de navigation, sélectionnez Rôles, puis Créer un rôle.
-
Choisissez une politique de confiance personnalisée.
-
Supprimez la politique de confiance personnalisée existante.
-
Ajoutez la politique de confiance personnalisée suivante :
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
Choisissez Suivant.
-
Dans Politiques d'autorisations, recherchez
codecatalyst-deploy-policy
et cochez la case correspondante. -
Choisissez Suivant.
-
Dans Nom du rôle, entrez :
codecatalyst-deploy-role
-
Dans le champ Description du rôle, entrez :
CodeCatalyst deploy role
-
Sélectionnez Créer un rôle.
Vous venez de créer un rôle de déploiement avec une politique de confiance et une politique d'autorisations.
-
-
Obtenez l'ARN du rôle de déploiement, comme suit :
-
Dans le panneau de navigation, choisissez Roles (Rôles).
-
Dans le champ de recherche, entrez le nom du rôle que vous venez de créer (
codecatalyst-deploy-role
). -
Choisissez le rôle dans la liste.
La page Résumé du rôle apparaît.
-
En haut, copiez la valeur de l'ARN.
Vous avez maintenant créé le rôle de déploiement avec les autorisations appropriées et obtenu son ARN.
-
Pour créer un rôle de build
-
Créez une politique pour le rôle, comme suit :
-
Connectez-vous à AWS.
Ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/
. -
Dans le volet de navigation, choisissez Politiques.
-
Sélectionnez Create policy (Créer une politique).
-
Choisissez l'onglet JSON.
-
Supprimez le code existant.
-
Collez le code suivant :
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:PutObject", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
Note
La première fois que le rôle est utilisé pour exécuter des actions de flux de travail, utilisez le caractère générique dans la déclaration de politique de ressources, puis définissez la stratégie avec le nom de la ressource une fois celle-ci disponible.
"Resource": "*"
-
Choisissez Suivant : Balises.
-
Choisissez Suivant : Vérification.
-
Dans Nom, entrez :
codecatalyst-build-policy
-
Choisissez Create Policy (Créer une politique).
Vous venez de créer une politique d'autorisation.
-
-
Créez le rôle de build, comme suit :
-
Dans le volet de navigation, sélectionnez Rôles, puis Créer un rôle.
-
Choisissez une politique de confiance personnalisée.
-
Supprimez la politique de confiance personnalisée existante.
-
Ajoutez la politique de confiance personnalisée suivante :
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
Choisissez Suivant.
-
Dans Politiques d'autorisations, recherchez
codecatalyst-build-policy
et cochez la case correspondante. -
Choisissez Suivant.
-
Dans Nom du rôle, entrez :
codecatalyst-build-role
-
Dans le champ Description du rôle, entrez :
CodeCatalyst build role
-
Sélectionnez Créer un rôle.
Vous avez maintenant créé un rôle de build avec une politique de confiance et une politique d'autorisations.
-
-
Obtenez l'ARN du rôle de build, comme suit :
-
Dans le panneau de navigation, choisissez Roles (Rôles).
-
Dans le champ de recherche, entrez le nom du rôle que vous venez de créer (
codecatalyst-build-role
). -
Choisissez le rôle dans la liste.
La page Résumé du rôle s'affiche.
-
En haut, copiez la valeur de l'ARN.
Vous avez maintenant créé le rôle de build avec les autorisations appropriées et obtenu son ARN.
-
Pour créer un rôle de pile
-
Connectez-vous à AWS l'aide du compte sur lequel vous souhaitez déployer votre stack.
Ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/
. -
Créez le rôle de pile comme suit :
-
Dans le panneau de navigation, choisissez Roles (Rôles).
-
Sélectionnez Create role (Créer un rôle).
-
Choisissez Service AWS .
-
Dans la section Cas d'utilisation, choisissez CloudFormationdans la liste déroulante.
-
Sélectionnez le bouton CloudFormationradio.
-
En bas de la page, choisissez Next.
-
À l'aide de la zone de recherche, recherchez les politiques d'autorisation suivantes, puis cochez leurs cases respectives.
Note
Si vous recherchez une politique et qu'elle n'apparaît pas, assurez-vous de choisir Effacer les filtres et réessayez.
-
CloudWatchFullAccess
-
AWS CloudFormationFullAccess
-
IAMFullAccès
-
AWS Lambda_ FullAccess
-
APIGatewayAdministrateur Amazon
-
Amazon S3 FullAccess
-
AmazonEC2ContainerRegistryFullAccess
La première politique autorise l'accès CloudWatch pour activer les rollbacks de pile lorsqu'une alarme se produit.
Les politiques restantes permettent AWS SAM d'accéder aux services et aux ressources de la pile qui seront déployés dans ce didacticiel. Pour plus d'informations, consultez la section Permissions dans le guide du AWS Serverless Application Model développeur.
-
-
Choisissez Suivant.
-
Dans Nom du rôle, entrez :
codecatalyst-stack-role
-
Sélectionnez Créer un rôle.
-
-
Obtenez l'ARN du rôle de pile, comme suit :
-
Dans le panneau de navigation, choisissez Roles (Rôles).
-
Dans le champ de recherche, entrez le nom du rôle que vous venez de créer (
codecatalyst-stack-role
). -
Choisissez le rôle dans la liste.
-
Dans la section Résumé, copiez la valeur de l'ARN. Vous en aurez besoin ultérieurement.
Vous avez maintenant créé le rôle stack avec les autorisations appropriées, et vous avez obtenu son ARN.
-
Étape 3 : ajouter AWS des rôles à CodeCatalyst
Au cours de cette étape, vous ajoutez le rôle de création (codecatalyst-build-role
) et le rôle de déploiement (codecatalyst-deploy-role
) à la connexion au CodeCatalyst compte dans votre espace.
Note
Il n'est pas nécessaire d'ajouter le rôle stack (codecatalyst-stack-role
) à la connexion. Cela est dû au fait que le rôle de pile est utilisé CloudFormation(et non CodeCatalyst), une fois qu'une connexion est déjà établie entre CodeCatalyst et AWS en utilisant le rôle de déploiement. Comme le rôle stack n'est pas utilisé CodeCatalyst pour accéder à AWS, il n'est pas nécessaire de l'associer à une connexion à un compte.
Pour ajouter des rôles de création et de déploiement à votre compte, connectez-vous
-
Dans CodeCatalyst, naviguez jusqu'à votre espace.
-
Choisissez AWS des comptes. La liste des connexions au compte s'affiche.
-
Choisissez la connexion au compte qui représente le AWS compte sur lequel vous avez créé vos rôles de création et de déploiement.
-
Choisissez Gérer les rôles depuis AWS la console de gestion.
La page Ajouter un rôle IAM à Amazon CodeCatalyst Space s'affiche. Il se peut que vous deviez vous connecter pour accéder à la page.
-
Sélectionnez Ajouter un rôle existant que vous avez créé dans IAM.
Une liste déroulante apparaît. La liste affiche tous les rôles IAM dotés d'une politique de confiance qui inclut les principaux de
codecatalyst.amazonaws.com
servicecodecatalyst-runner.amazonaws.com
et. -
Dans la liste déroulante, sélectionnez
codecatalyst-build-role
, puis choisissez Ajouter un rôle. -
Choisissez Ajouter un rôle IAM, choisissez Ajouter un rôle existant que vous avez créé dans IAM, puis dans la liste déroulante, sélectionnez.
codecatalyst-deploy-role
Choisissez Ajouter un rôle.Vous avez maintenant ajouté les rôles de création et de déploiement à votre espace.
-
Copiez la valeur du nom CodeCatalyst d'affichage Amazon. Vous aurez besoin de cette valeur ultérieurement, lors de la création de votre flux de travail.
Étape 4 : Création d'un compartiment Amazon S3
Au cours de cette étape, vous créez un compartiment Amazon S3 dans lequel vous stockez le fichier .zip du package de déploiement de votre application sans serveur.
Pour créer un compartiment Amazon S3
Ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/
. -
Dans le volet principal, choisissez Create bucket.
-
Dans le champ Nom du compartiment, entrez :
codecatalyst-cfn-s3-bucket
-
Choisissez une région dans Région AWS . Ce didacticiel part du principe que vous avez choisi US West (Oregon) us-west-2. Pour plus d'informations sur les régions prises en charge par Amazon S3, consultez la section Points de terminaison et quotas Amazon Simple Storage Service dans le Références générales AWS.
-
Au bas de la page, choisissez Create bucket.
Vous venez de créer un bucket appelé codecatalyst-cfn-s3-bucket
dans la région us-west-2 de l'ouest des États-Unis (Oregon).
Étape 5 : Ajouter des fichiers source
Au cours de cette étape, vous allez ajouter plusieurs fichiers source de l'application à votre référentiel CodeCatalyst source. Le hello-world
dossier contient les fichiers d'application que vous allez déployer. Le tests
dossier contient les tests unitaires. La structure des dossiers est la suivante :
.
|— hello-world
| |— tests
| |— unit
| |— test-handler.js
| |— app.js
|— .npmignore
|— package.json
|— sam-template.yml
|— setup-sam.sh
fichier .npmignore
Le .npmignore
fichier indique les fichiers et dossiers que npm doit exclure du package de l'application. Dans ce didacticiel, npm exclut le tests
dossier car il ne fait pas partie de l'application.
Pour ajouter le fichier .npmignore
Ouvrez la CodeCatalyst console à l'adresse https://codecatalyst.aws/
. -
Choisissez votre projet,
codecatalyst-cfn-project
-
Dans le volet de navigation, choisissez Code, puis sélectionnez Référentiels sources.
-
Dans la liste des référentiels sources, choisissez votre référentiel,
codecatalyst-cfn-source-repository
. -
Dans Fichiers, choisissez Créer un fichier.
-
Dans Nom du fichier, entrez :
.npmignore
-
Dans la zone de texte, entrez le code suivant :
tests/*
-
Choisissez Commit, puis sélectionnez Commit à nouveau.
Vous venez de créer un fichier appelé
.npmignore
à la racine de votre dépôt.
fichier package.json
Le package.json
fichier contient des métadonnées importantes concernant votre projet Node, telles que le nom du projet, le numéro de version, la description, les dépendances et d'autres détails qui décrivent comment interagir avec votre application et l'exécuter.
package.json
Dans ce didacticiel, vous trouverez une liste de dépendances et un test
script. Le script de test effectue les opérations suivantes :
-
À l'aide de mocha
, le script de test exécute les tests unitaires spécifiés dans hello-world/tests/unit/
et écrit les résultats dans unjunit.xml
fichier à l'aide du rapporteur xunit. -
À l'aide d'Istanbul (NYC)
, le script de test génère un rapport de couverture de code ( clover.xml
) à l'aide du CloverReporter. Pour plus d'informations, consultez la section Utilisation de reporters alternatifs dans la documentation d'Istanbul.
Pour ajouter le fichier package.json
-
Dans votre référentiel, dans Fichiers, choisissez Créer un fichier.
-
Dans le champ Nom du fichier, entrez :
package.json
-
Dans la zone de texte, entrez le code suivant :
{ "name": "hello_world", "version": "1.0.0", "description": "hello world sample for NodeJS", "main": "app.js", "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs", "author": "SAM CLI", "license": "MIT", "dependencies": { "axios": "^0.21.1", "nyc": "^15.1.0" }, "scripts": { "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml" }, "devDependencies": { "aws-sdk": "^2.815.0", "chai": "^4.2.0", "mocha": "^8.2.1" } }
-
Choisissez Commit, puis sélectionnez Commit à nouveau.
Vous venez d'ajouter un fichier appelé
package.json
à la racine du dépôt.
fichier sam-template.yml
Le sam-template.yml
fichier contient les instructions pour déployer la fonction Lambda et API Gateway et pour les configurer ensemble. Il suit la spécification du AWS Serverless Application Model
modèle, qui étend la spécification du AWS CloudFormation modèle.
Dans ce didacticiel, vous utilisez un AWS SAM modèle au lieu d'un AWS CloudFormation modèle normal car il AWS SAM propose un type de ressource utile AWS: :Serverless : :Function. Ce type effectue une grande partie de la behind-the-scenes configuration que vous devez normalement écrire pour utiliser la CloudFormation syntaxe de base. Par exemple, AWS::Serverless::Function
crée une fonction Lambda, un rôle d'exécution Lambda et des mappages de sources d'événements qui démarrent la fonction. Vous devez coder tout cela si vous voulez l'écrire en utilisant basic CloudFormation.
Bien que ce didacticiel utilise un modèle pré-écrit, vous pouvez en générer un dans le cadre de votre flux de travail à l'aide d'une action de génération. Pour de plus amples informations, veuillez consulter Déploiement d'une AWS CloudFormation pile.
Pour ajouter le fichier sam-template.yml
-
Dans votre référentiel, dans Fichiers, choisissez Créer un fichier.
-
Dans le champ Nom du fichier, entrez :
sam-template.yml
-
Dans la zone de texte, entrez le code suivant :
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > serverless-api Sample SAM Template for serverless-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs12.x Events: HelloWorld: Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function # Find out about other implicit resources you can reference within AWS SAM at # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for the Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit Lambda execution role created for the Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn
-
Choisissez Commit, puis sélectionnez Commit à nouveau.
Vous venez d'ajouter un fichier appelé
sam-template.yml
sous le dossier racine de votre dépôt.
fichier setup-sam.sh
Le setup-sam.sh
fichier contient les instructions de téléchargement et d'installation de l'utilitaire AWS SAM CLI. Le flux de travail utilise cet utilitaire pour empaqueter la hello-world
source.
Pour ajouter le fichier setup-sam.sh
-
Dans votre référentiel, dans Fichiers, choisissez Créer un fichier.
-
Dans le champ Nom du fichier, entrez :
setup-sam.sh
-
Dans la zone de texte, entrez le code suivant :
#!/usr/bin/env bash echo "Setting up sam" yum install unzip -y curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory ./sam-installation-directory/install; export AWS_DEFAULT_REGION=
us-west-2
Dans le code précédent, remplacez
us-west-2
par votre AWS région. -
Choisissez Commit, puis sélectionnez Commit à nouveau.
Vous venez d'ajouter un fichier appelé
setup-sam.sh
à la racine du dépôt.
fichier app.js
app.js
Contient le code de la fonction Lambda. Dans ce didacticiel, le code renvoie le textehello world
.
Pour ajouter le fichier app.js
-
Dans votre référentiel, dans Fichiers, choisissez Créer un fichier.
-
Dans le champ Nom du fichier, entrez :
hello-world/app.js
-
Dans la zone de texte, entrez le code suivant :
// const axios = require('axios') // const url = 'http://checkip.amazonaws.com/'; let response; /** * * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format * @param {Object} event - API Gateway Lambda Proxy Input Format * * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html * @param {Object} context * * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html * @returns {Object} object - API Gateway Lambda Proxy Output Format * */ exports.lambdaHandler = async (event, context) => { try { // const ret = await axios(url); response = { 'statusCode': 200, 'body': JSON.stringify({ message: 'hello world', // location: ret.data.trim() }) } } catch (err) { console.log(err); return err; } return response };
-
Choisissez Commit, puis sélectionnez Commit à nouveau.
Vous avez maintenant créé un dossier appelé
hello-world
et un fichier appeléapp.js
.
fichier test-handler.js
Le test-handler.js
fichier contient des tests unitaires pour la fonction Lambda.
Pour ajouter le fichier test-handler.js
-
Dans votre référentiel, dans Fichiers, choisissez Créer un fichier.
-
Dans le champ Nom du fichier, entrez :
hello-world/tests/unit/test-handler.js
-
Dans la zone de texte, entrez le code suivant :
'use strict'; const app = require('../../app.js'); const chai = require('chai'); const expect = chai.expect; var event, context; describe('Tests index', function () { it('verifies successful response', async () => { const result = await app.lambdaHandler(event, context) expect(result).to.be.an('object'); expect(result.statusCode).to.equal(200); expect(result.body).to.be.an('string'); let response = JSON.parse(result.body); expect(response).to.be.an('object'); expect(response.message).to.be.equal("hello world"); // expect(response.location).to.be.an("string"); }); });
-
Choisissez Commit, puis sélectionnez Commit à nouveau.
Vous venez d'ajouter un fichier appelé
test-handler.js
sous lehello-world/tests/unit
dossier.
Vous avez maintenant ajouté tous vos fichiers sources.
Prenez le temps de vérifier votre travail et de vous assurer que vous avez placé tous les fichiers dans les bons dossiers. La structure des dossiers est la suivante :
.
|— hello-world
| |— tests
| |— unit
| |— test-handler.js
| |— app.js
|— .npmignore
|— README.md
|— package.json
|— sam-template.yml
|— setup-sam.sh
Étape 6 : créer et exécuter un flux de travail
Au cours de cette étape, vous créez un flux de travail qui empaquette votre code source Lambda et le déploie. Le flux de travail comprend les éléments de base suivants qui s'exécutent de manière séquentielle :
-
Un déclencheur : ce déclencheur lance automatiquement l'exécution du flux de travail lorsque vous apportez une modification à votre référentiel source. Pour plus d'informations sur les déclencheurs, consultez Démarrage d'un flux de travail exécuté automatiquement à l'aide de déclencheurs.
-
Une action de test (
Test
) — Au déclenchement, cette action installe le gestionnaire de packages Node (npm), puis exécute la npm run test
commande. Cette commande indique à npm d'exécuter letest
script défini dans lepackage.json
fichier. Letest
script exécute à son tour les tests unitaires et génère deux rapports : un rapport de test (junit.xml
) et un rapport de couverture de code (clover.xml
). Pour de plus amples informations, veuillez consulter fichier package.json.Ensuite, l'action de test transforme les rapports XML en CodeCatalyst rapports et les affiche dans la CodeCatalyst console, sous l'onglet Rapports de l'action de test.
Pour plus d'informations sur l'action de test, consultezTests avec des flux de travail.
-
Une action de construction (
BuildBackend
) : à la fin de l'action de test, l'action de génération télécharge et installe la AWS SAM CLI, empaquète lahello-world
source et copie le package dans votre compartiment Amazon S3, là où le service Lambda s'attend à ce qu'il se trouve. L'action génère également un nouveau fichier AWS SAM modèle appelésam-template-packaged.yml
et le place dans un artefact de sortie appelébuildArtifact
.Pour plus d'informations sur l'action de génération, consultezConstruire avec des flux de travail.
-
Une action de déploiement (
DeployCloudFormationStack
) : à la fin de l'action de génération, l'action de déploiement recherche l'artefact de sortie généré par l'action de génération (buildArtifact
), trouve le AWS SAM modèle à l'intérieur de celui-ci, puis exécute le modèle. Le AWS SAM modèle crée une pile qui déploie l'application sans serveur.
Pour créer un flux de travail
-
Dans le volet de navigation, choisissez CI/CD, puis Workflows.
-
Choisissez Créer un flux de travail.
-
Pour Référentiel source, choisissez
codecatalyst-cfn-source-repository
. -
Pour Branch, choisissez
main
. -
Sélectionnez Create (Créer).
-
Supprimez l'exemple de code YAML.
-
Ajoutez le code YAML suivant :
Note
Dans le code YAML qui suit, vous pouvez omettre les
Connections:
sections si vous le souhaitez. Si vous omettez ces sections, vous devez vous assurer que le rôle spécifié dans le champ Rôle IAM par défaut de votre environnement inclut les autorisations et les politiques de confiance des deux rôles décrits dans. Étape 2 : créer des AWS rôles Pour plus d'informations sur la configuration d'un environnement doté d'un rôle IAM par défaut, consultezCréation d'un environnement.Name: codecatalyst-cfn-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: Test: Identifier: aws/managed-test@v1 Inputs: Sources: - WorkflowSource Outputs: Reports: CoverageReport: Format: CLOVERXML IncludePaths: - "coverage/*" TestReport: Format: JUNITXML IncludePaths: - junit.xml Configuration: Steps: - Run: npm install - Run: npm run test BuildBackend: Identifier: aws/build@v1 DependsOn: - Test Environment: Name:
codecatalyst-cfn-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-build-role
Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: . ./setup-sam.sh - Run: sam package --template-file sam-template.yml --s3-bucketcodecatalyst-cfn-s3-bucket
--output-template-file sam-template-packaged.yml --regionus-west-2
Outputs: Artifacts: - Name: buildArtifact Files: - "**/*" DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 DependsOn: - BuildBackend Environment: Name:codecatalyst-cfn-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-deploy-role
Inputs: Artifacts: - buildArtifact Sources: [] Configuration: name: codecatalyst-cfn-stack region:us-west-2
role-arn:arn:aws:iam::111122223333:role/StackRole
template: ./sam-template-packaged.yml capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPANDDans le code précédent, remplacez :
-
Les deux instances
codecatalyst-cfn-environment
portent le nom de votre environnement. -
Dans les deux cas,
codecatalyst-account-connection
avec le nom d'affichage de la connexion à votre compte. Le nom d'affichage peut être un chiffre. Pour de plus amples informations, veuillez consulter Étape 3 : ajouter AWS des rôles à CodeCatalyst. -
codecatalyst-build-role
avec le nom du rôle de build que vous avez créé dansÉtape 2 : créer des AWS rôles. -
codecatalyst-cfn-s3-bucket
avec le nom du compartiment Amazon S3 dans lequel vous l'avez crééÉtape 4 : Création d'un compartiment Amazon S3. -
Les deux instances
us-west-2
concernent la région dans laquelle se trouve votre compartiment Amazon S3 (première instance) et dans laquelle votre stack sera déployé (deuxième instance). Ces régions peuvent être différentes. Ce didacticiel part du principe que les deux régions sont définies surus-west-2
. Pour en savoir plus sur les régions prises en charge par Amazon S3 AWS CloudFormation, consultez la section Points de terminaison et quotas du service dans le Références générales AWS. -
codecatalyst-deploy-role
avec le nom du rôle de déploiement que vous avez créé dansÉtape 2 : créer des AWS rôles. -
codecatalyst-cfn-environment
avec le nom de l'environnement dans lequel vous l'avez crééPrérequis. -
arn:aws:iam::111122223333:role/StackRole
avec l'Amazon Resource Name (ARN) du rôle de pile que vous avez créé dansÉtape 2 : créer des AWS rôles.Note
Si vous avez décidé de ne pas créer de rôles de génération, de déploiement et d'empilement
codecatalyst-build-role
codecatalyst-deploy-role
, remplacez etarn:aws:iam::111122223333:role/StackRole
par le nom ou l'ARN duCodeCatalystWorkflowDevelopmentRole-
rôle. Pour plus d’informations sur ce rôle, consultez Étape 2 : créer des AWS rôles.spaceName
Pour plus d'informations sur les propriétés du code présenté précédemment, consultez leAction « Déployer une AWS CloudFormation pile » YAML.
-
-
(Facultatif) Choisissez Valider pour vous assurer que le code YAML est valide avant de valider.
-
Choisissez Commit (Valider).
-
Dans la boîte de dialogue du flux de travail de validation, entrez ce qui suit :
-
Pour le nom du fichier de flux de travail, conservez la valeur par défaut,
codecatalyst-cfn-workflow
. -
Pour le message de validation, entrez :
add initial workflow file
-
Pour Repository, choisissez codecatalyst-cfn-source-repository.
-
Pour Nom de la branche, choisissez main.
-
Choisissez Commit (Valider).
Vous venez de créer un flux de travail. L'exécution d'un flux de travail démarre automatiquement en raison du déclencheur défini en haut du flux de travail. Plus précisément, lorsque vous avez validé (et transféré) le
codecatalyst-cfn-workflow.yaml
fichier dans votre référentiel source, le déclencheur a lancé l'exécution du flux de travail. -
Pour consulter le flux de travail en cours d'exécution
-
Dans le volet de navigation, choisissez CI/CD, puis Workflows.
-
Choisissez le flux de travail que vous venez de créer :
codecatalyst-cfn-workflow
. -
Choisissez l'onglet Runs.
-
Dans la colonne Run ID, choisissez l'Run ID.
-
Choisissez Test pour voir la progression des tests.
-
Choisissez BuildBackendde voir la progression de la construction.
-
Choisissez DeployCloudFormationStackde voir la progression du déploiement.
Pour plus d'informations sur l'affichage des détails des courses, consultezAfficher le statut et les détails de l'exécution du flux de travail.
-
Lorsque l'DeployCloudFormationStackaction est terminée, procédez comme suit :
-
Si l'exécution du flux de travail a réussi, passez à la procédure suivante.
-
Si l'exécution du flux de travail a échoué lors du test ou de BuildBackendl'action, choisissez Logs pour résoudre le problème.
-
Si l'exécution du flux de travail a échoué lors de l'DeployCloudFormationStackaction, choisissez l'action de déploiement, puis cliquez sur l'onglet Résumé. Accédez à la section CloudFormation des événements pour afficher le message d'erreur détaillé. En cas de restauration, supprimez la
codecatalyst-cfn-stack
pile via la AWS CloudFormation console AWS avant de réexécuter le flux de travail.
-
Pour vérifier le déploiement
-
Après un déploiement réussi, choisissez Variables (7) dans la barre de menu horizontale située en haut. (Ne choisissez pas Variables dans le volet de droite.)
-
Ensuite HelloWorldApi, collez l'
https://
URL dans un navigateur.Un message JSON « hello world » de la fonction Lambda s'affiche, indiquant que le flux de travail a déployé et configuré correctement la fonction Lambda et l'API Gateway.
Astuce
Vous pouvez avoir CodeCatalyst affiché cette URL dans le diagramme de flux de travail avec quelques petites configurations. Pour de plus amples informations, veuillez consulter Afficher l'URL de l'application dans le diagramme du flux de travail.
Pour vérifier les résultats des tests unitaires et la couverture du code
-
Dans le diagramme du flux de travail, choisissez Test, puis Reports.
-
Choisissez TestReportd'afficher les résultats des tests unitaires ou CoverageReportd'afficher les détails de couverture du code des fichiers testés, dans ce cas,
app.js
ettest-handler.js
.
Pour vérifier les ressources déployées
Connectez-vous à la console API Gateway AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/apigateway/
. -
Observez l'codecatalyst-cfn-stackAPI créée par le AWS SAM modèle. Le nom de l'API provient de la
Configuration/name
valeur du fichier de définition du flux de travail (codecatalyst-cfn-workflow.yaml
). Ouvrez la AWS Lambda console à l'adresse https://console.aws.amazon.com/lambda/
. -
Dans le volet de navigation, choisissez Fonctions.
-
Choisissez votre fonction Lambda,.
codecatalyst-cfn-stack-HelloWorldFunction-
string
-
Vous pouvez voir comment l'API Gateway est un déclencheur de cette fonction. Cette intégration a été automatiquement configurée en fonction du type de AWS SAM
AWS::Serverless::Function
ressource.
Étape 7 : Apporter une modification
Au cours de cette étape, vous apportez une modification à votre code source Lambda et vous le validez. Ce commit lance une nouvelle exécution du flux de travail. Cette exécution déploie la nouvelle fonction Lambda dans un schéma bleu-vert qui utilise la configuration de transfert de trafic par défaut spécifiée dans la console Lambda.
Pour apporter une modification à votre source Lambda
-
Dans CodeCatalyst, accédez à votre projet.
-
Dans le volet de navigation, choisissez Code, puis sélectionnez Référentiels sources.
-
Choisissez votre référentiel source
codecatalyst-cfn-source-repository
. -
Modifiez le dossier de candidature :
-
Choisissez le dossier
hello-world
. -
Choisissez le
app.js
fichier. -
Choisissez Modifier.
-
À la ligne 23, changez
hello world
enTutorial complete!
. -
Choisissez Commit, puis sélectionnez Commit à nouveau.
La validation entraîne le démarrage d'un flux de travail. Cette exécution échouera car vous n'avez pas mis à jour les tests unitaires pour refléter le changement de nom.
-
-
Mettez à jour les tests unitaires :
-
Sélectionnez
hello-world\tests\unit\test-handler.js
. -
Choisissez Modifier.
-
À la ligne 19, changez
hello world
enTutorial complete!
. -
Choisissez Commit, puis sélectionnez Commit à nouveau.
La validation entraîne le démarrage d'une autre exécution du flux de travail. Cette course sera couronnée de succès.
-
-
Dans le volet de navigation, choisissez CI/CD, puis Workflows.
-
Choisissez
codecatalyst-cfn-workflow
, puis choisissez Runs. -
Choisissez l'ID d'exécution de la dernière exécution. Il devrait toujours être en cours.
-
Choisissez Test BuildBackend, et DeployCloudFormationStackpour voir la progression de l'exécution du flux de travail.
-
Lorsque le flux de travail est terminé, choisissez Variables (7) en haut.
-
Ensuite HelloWorldApi, collez l'
https://
URL dans un navigateur.Un
Tutorial complete!
message s'affiche dans le navigateur, indiquant que votre nouvelle application a été déployée avec succès.
Nettoyage
Nettoyez les fichiers et les services utilisés dans ce didacticiel pour éviter de vous les faire facturer.
Pour nettoyer dans la CodeCatalyst console
Ouvrez la CodeCatalyst console à l'adresse https://codecatalyst.aws/
. -
Supprimer
codecatalyst-cfn-workflow
. -
Supprimer
codecatalyst-cfn-environment
. -
Supprimer
codecatalyst-cfn-source-repository
. -
Supprimer
codecatalyst-cfn-project
.
Pour nettoyer dans le AWS Management Console
-
Nettoyez en CloudFormation procédant comme suit :
Ouvrez la AWS CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.
-
Supprimez la
codecatalyst-cfn-stack
.La suppression de la pile supprime toutes les ressources du didacticiel des services API Gateway et Lambda.
-
Nettoyez dans Amazon S3, comme suit :
Ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/
. -
Cliquez sur le bouton
codecatalyst-cfn-s3-bucket
. -
Supprimez le contenu du compartiment.
-
Supprimez le compartiment.
-
Nettoyez dans IAM, comme suit :
Ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/
. -
Supprimez la
codecatalyst-deploy-policy
. -
Supprimez la
codecatalyst-build-policy
. -
Supprimez la
codecatalyst-stack-policy
. -
Supprimez la
codecatalyst-deploy-role
. -
Supprimez la
codecatalyst-build-role
. -
Supprimez la
codecatalyst-stack-role
.
Dans ce didacticiel, vous avez appris à déployer une application sans serveur sous forme de CloudFormation pile à l'aide d'un CodeCatalyst flux de travail et d'une action de déploiement de AWS CloudFormation pile.