

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.

# Ajout de composants d'application sans serveur
<a name="cloudformation-serverless-application"></a>

**Important**  
AWS Marketplace ne prend plus en charge la publication de nouveaux produits avec des CloudFormation modèles à partir desquels des ressources sont déployées AWS Serverless Application Repository. Les vendeurs peuvent continuer à publier des produits existants avec des CloudFormation modèles qui déploient des ressources AWS Serverless Application Repository jusqu'à une date future qui sera annoncée.

Vous pouvez créer un produit qui inclut une Amazon Machine Image (AMI), fournie à l'aide d'un AWS CloudFormation modèle, avec des composants sans serveur intégrés au produit. Par exemple, vous pouvez créer un produit avec une AMI configurée en tant que serveur contrôleur et le livrer sous forme de CloudFormation pile. Le CloudFormation modèle utilisé pour créer la pile peut inclure la définition permettant de configurer une AWS Lambda fonction déclenchée par un événement sur le serveur. Lorsque vous utilisez cette approche pour concevoir votre produit, vous pouvez en simplifier l'architecture et en faciliter le lancement pour vos acheteurs. Cette approche peut également faciliter la mise à jour de votre produit. Les sections suivantes vous montrent comment créer et proposer ce type de produit.

Pour plus d'informations sur la création d'une AMI pour votre produit, consultez[Produits à base d'AMI en AWS Marketplace](ami-products.md). Pour plus d'informations sur la AWS CloudFormation façon de remplir des modèles pour votre produit, consultez[Ajoutez CloudFormation des modèles à votre produit](cloudformation.md). 

Lorsque vous définissez votre application sans serveur, vous utilisez un modèle AWS Serverless Application Model (AWS SAM) que vous stockez dans le AWS Serverless Application Repository. AWS SAM est un framework open source permettant de créer des applications sans serveur. Lors du déploiement, AWS SAM transforme et développe la AWS Serverless Application Model syntaxe en CloudFormation syntaxe. AWS Serverless Application Repository est un référentiel géré pour les applications sans serveur. Il vous permet de stocker et de partager des applications réutilisables afin que les acheteurs puissent assembler et déployer des architectures sans serveur. 

**Note**  
AWS Marketplace examine et valide votre produit avant la création de votre annonce. S'il y a des problèmes que vous devez résoudre avant que l'offre ne soit répertoriée, nous vous enverrons un e-mail.
Dans le cadre de l'exécution d'un abonnement, nous copions les AMIs applications sans serveur et les CloudFormation modèles dans un référentiel AWS Marketplace appartenant à chacun d'entre eux. Région AWS Lorsqu'un acheteur s'abonne à votre produit, nous lui accordons l'accès et l'informons lorsque vous mettez à jour votre logiciel.

**Topics**
+ [Étape 1 : créer une application sans serveur](#cloudformation-serverless-application-procedure-step-1)
+ [Étape 2 : Publiez votre application dans le référentiel](#cloudformation-serverless-application-procedure-step-2)
+ [Étape 3 : Création du CloudFormation modèle](#cloudformation-serverless-application-procedure-step-3)
+ [Étape 4 : Soumettez votre CloudFormation modèle et vos fichiers de configuration](#cloudformation-serverless-application-procedure-step-4)
+ [Étape 5 : mettez à jour les autorisations de votre AWS Serverless Application Repository application](#cloudformation-serverless-application-procedure-step-5)
+ [Étape 6 : partagez votre AMI](#cloudformation-serverless-application-procedure-step-6)
+ [Étape 7 : Soumettez votre CloudFormation produit avec une AMI et une application sans serveur](#cloudformation-serverless-application-procedure-step-7)

## Étape 1 : créer une application sans serveur
<a name="cloudformation-serverless-application-procedure-step-1"></a>

La première étape consiste à regrouper les AWS Lambda fonctions utilisées pour créer votre application sans serveur. Votre application est une combinaison de fonctions Lambda, de sources d'événements et d'autres ressources qui fonctionnent ensemble pour effectuer des tâches. Une application sans serveur peut être aussi simple qu'une fonction Lambda, ou elle peut contenir plusieurs fonctions associées à d'autres ressources, APIs telles que des bases de données et des mappages de sources d'événements.

Utilisez le AWS SAM pour définir un modèle pour votre application sans serveur. Pour une description des noms et des types de propriétés, reportez-vous [AWS::Serverless::Application](https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication)à la section AWS Laboratoires sur GitHub. Voici un exemple de AWS SAM modèle avec une seule fonction Lambda et un seul rôle Gestion des identités et des accès AWS (IAM).

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: An example of SAM template with Lambda function and IAM role

Resources:
  SampleFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: 'com.sampleproject.SampleHandler::handleRequest'
      Runtime: java8
      CodeUri: 's3://amzn-s3-demo-bucket/{{2EXAMPLE-1234-4b12-ac37-515EXAMPLEe5-lambda.zip}}'
      Description: Sample Lambda function
      Timeout: 120
      MemorySize: 1024
      Role:
        Fn::GetAtt: [SampleFunctionRole, Arn]

  # Role to execute the Lambda function
  SampleFunctionRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: "Allow"
            Principal:
              Service:
                - "lambda.amazonaws.com"
            Action: "sts:AssumeRole"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
      Policies:
        - PolicyName: SFNXDeployWorkflowDefinitionPolicy
          PolicyDocument:
            Statement:
              - Effect: "Allow"
                Action:
                  - "s3:Get*"
                Resource: "*"
      RoleName: "SampleFunctionRole"
```

## Étape 2 : Publiez votre application dans le référentiel
<a name="cloudformation-serverless-application-procedure-step-2"></a>

Pour publier une application, vous chargez d'abord le code de l'application. Stockez vos artefacts de code (par exemple, les fonctions Lambda, les scripts, les fichiers de configuration) dans un compartiment Amazon S3 appartenant à votre compte. Lorsque vous téléchargez votre application, elle est initialement définie comme privée, ce qui signifie qu'elle n'est accessible qu'à Compte AWS celui qui l'a créée. Vous devez créer une politique IAM qui accorde AWS Serverless Application Repository les autorisations d'accès aux artefacts que vous avez chargés.

**Pour publier votre application sans serveur dans le référentiel d'applications sans serveur**

1. Ouvrez la console Amazon S3 à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Choisissez le compartiment Amazon S3 que vous avez utilisé pour empaqueter votre application.

1. Sélectionnez l’onglet **Autorisations**.

1. Choisissez **Stratégie de compartiment**.

1. Copiez et collez l'exemple de déclaration de politique suivant. 
**Note**  
L'exemple de déclaration de politique produira une erreur jusqu'à ce que les valeurs pour `aws:SourceAccount` et `Resource` soient mises à jour dans les étapes suivantes.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service":  "serverlessrepo.amazonaws.com"
               },
               "Action": "s3:GetObject",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
               "Condition" : {
                   "StringEquals": {
                       "aws:SourceAccount": "{{123456789012}}"
                   }
               }
           }
       ]
   }
   ```

------

   1. Remplacez amzn-s3-demo-bucket dans la valeur de la `Resource` propriété par le nom du bucket de votre bucket. 

   1. Remplacez {{123456789012}} l'`Condition`élément par votre Compte AWS identifiant. L'`Condition`élément garantit que le AWS Serverless Application Repository seul est autorisé à accéder aux applications à partir de la valeur spécifiée Compte AWS.

1. Choisissez **Enregistrer**.

1. Ouvrez la AWS Serverless Application Repository console à l'adresse[https://console.aws.amazon.com/serverlessrepo](https://console.aws.amazon.com/serverlessrepo).

1. Sur la page **My Applications (Mes applications)** choisissez **Publish application (Publier une application)**.

1. Remplissez les champs obligatoires et, si vous le souhaitez, les champs facultatifs. Les champs obligatoires sont les suivants :
   +  **Application name (Nom de l'application)** 
   +  **Author (Auteur)** 
   +  **Description** 
   +  **Source code URL (URL du code source)** 
   +  **SAM template (Modèle SAM)** 

1. Choisissez **Publish Application (Publier une application)**. 

**Pour publier les versions suivantes de votre application**

1. Ouvrez la AWS Serverless Application Repository console à l'adresse[https://console.aws.amazon.com/serverlessrepo](https://console.aws.amazon.com/serverlessrepo).

1. Dans le volet de navigation, dans **My Applications (Mes applications)**, choisissez l'application.

1. Choisissez **Publish new version (Publier une nouvelle version)**.

Pour plus d'informations, consultez la section [Publication d'applications sans serveur à l'aide de la AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications.html).

## Étape 3 : Création du CloudFormation modèle
<a name="cloudformation-serverless-application-procedure-step-3"></a>

Pour créer vos CloudFormation modèles, vous devez répondre aux exigences du modèle et fournir les paramètres d'entrée et de sécurité requis. Pour plus d'informations, consultez la section [Anatomie du modèle](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html) dans le *guide de AWS CloudFormation l'utilisateur*.

Dans votre CloudFormation modèle, vous pouvez référencer votre application sans serveur et votre AMI. Vous pouvez également utiliser des CloudFormation modèles imbriqués et référencer des applications sans serveur à la fois dans le modèle racine et dans les modèles imbriqués. Pour référencer l'application sans serveur, vous utilisez le AWS SAM modèle. Vous pouvez générer automatiquement le AWS SAM modèle de votre application à partir du AWS Serverless Application Repository. Voici un exemple de modèle.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: An example root template for a SAR application

Resources:
  SampleSARApplication:
    Type: AWS::Serverless::Application
    Properties:
      Location:
         ApplicationId: arn:aws:serverlessrepo:us-east-1:1234567890:applications/TestApplication
         SemanticVersion: 1.0.0
  SampleEC2Instance:
    Type: AWS::EC2::Instance
      Properties: 
        ImageId: "ami-79fd7eee"
        KeyName: "testkey"
        BlockDeviceMappings: 
          - DeviceName: "/dev/sdm"
            Ebs: 
              VolumeType: "io1"
              Iops: "200"
              DeleteOnTermination: "false"
              VolumeSize: "20"
          - DeviceName: "/dev/sdk"
            NoDevice: {}
```

Le AWS SAM modèle contient les éléments suivants :
+  `ApplicationID`— Le nom de ressource Amazon (ARN) de votre application. Ces informations se trouvent dans la section **My Applications (Mes applications)** du AWS Serverless Application Repository.
+  `SemanticVersion`— La version de votre application sans serveur. Vous pouvez le trouver dans la section **My Applications (Mes applications)** du référentiel AWS Serverless Application Repository.
+  `Parameter`(facultatif) — Paramètres de l'application.

**Note**  
Pour `ApplicationID` et`SemanticVersion`, les [fonctions intrinsèques](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html) ne sont pas prises en charge. Vous devez coder ces chaînes en dur. Le `ApplicationID` est mis à jour lorsqu'il est cloné par AWS Marketplace.

Si vous prévoyez de référencer des fichiers de configuration et de script dans votre CloudFormation modèle, utilisez le format suivant. Pour les modèles imbriqués (`AWS::Cloudformation::Stack`), seules les fonctions `TemplateURLs` sans fonctions intrinsèques sont prises en charge. Notez le contenu `Parameters` dans le modèle.

```
AWSTemplateFormatVersion: '2010-09-09'
Metadata:
  Name: Seller test product
Parameters:
  CFTRefFilesBucket:
    Type: String
    Default: "seller-bucket"
  CFTRefFilesBucketKeyPrefix:
    Type: String
    Default: "cftsolutionFolder/additionCFfiles"
Resources:
  TestEc2:
    Type: AWS::EC2::Instance
    Metadata:
      AWS::CloudFormation::Init:
        addCloudAccount:
          files:
            /etc/cfn/set-aia-settings.sh:
              source:
                Fn::Sub:
                - https://${CFTRefFilesBucket}.${S3Region}amazonaws.com/${CFTRefFilesBucketKeyPrefix}/{{sampleScript.sh}}
                - S3Region:
                    !If
                    - GovCloudCondition
                    - s3-us-gov-west-1
                    - s3
              owner: root
              mode: '000700'
              authentication: Amazon S3AccessCreds
    ..
    ..
    ..
  SampleNestedStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: 'https://sellerbucket.s3.amazon.com/sellerproductfolder/nestedCft.template'
      Parameters:
        SampleParameter: 'test'
Transform: AWS::Serverless-2016-10-31
```

## Étape 4 : Soumettez votre CloudFormation modèle et vos fichiers de configuration
<a name="cloudformation-serverless-application-procedure-step-4"></a>

Pour soumettre votre CloudFormation modèle, vos fichiers de configuration et vos fichiers de scripts, accordez AWS Marketplace les autorisations nécessaires pour lire le compartiment Amazon S3 dans lequel ces fichiers sont stockés. Pour ce faire, mettez à jour votre politique de compartiment afin d'inclure les autorisations suivantes.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service":  "assets.marketplace.amazonaws.com"
            },
            "Action": ["s3:GetObject", "s3:ListBucket"],
            "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                         "arn:aws:s3:::amzn-s3-demo-bucket/*"]
        }
    ]
}
```

------

## Étape 5 : mettez à jour les autorisations de votre AWS Serverless Application Repository application
<a name="cloudformation-serverless-application-procedure-step-5"></a>

Pour soumettre votre AWS Serverless Application Repository candidature à AWS Marketplace, vous devez autoriser AWS Marketplace la lecture de votre candidature. Pour ce faire, ajoutez des autorisations à une stratégie associée à votre application sans serveur. Vous pouvez mettre à jour votre politique d'application de deux manières :
+ Accédez à [AWS Serverless Application Repository](https://console.aws.amazon.com/serverlessrepo/home). Choisissez votre application sans serveur dans la liste. Sélectionnez l'onglet **Partage**, puis choisissez **Create Statement**. Sur la page **de configuration du relevé**, entrez le principal de service suivant**assets.marketplace.amazonaws.com**, dans le champ **Identifiants de compte**. Ensuite, choisissez **Save** (Enregistrer).
+ Utilisez la AWS CLI commande suivante pour mettre à jour la politique de votre application.

  ```
  aws serverlessrepo put-application-policy \
  --region {{region}} \
  --application-id {{application-arn}} \
  --statements Principals=assets.marketplace.amazonaws.com,Actions=Deploy
  ```

## Étape 6 : partagez votre AMI
<a name="cloudformation-serverless-application-procedure-step-6"></a>

Tous les produits AMIs fabriqués et soumis AWS Marketplace doivent respecter toutes les politiques relatives aux produits. L'analyse des AMI en libre-service est disponible dans Portail de gestion AWS Marketplace. Grâce à cette fonctionnalité, vous pouvez lancer des scans de votre AMIs. Vous recevez les résultats de numérisation rapidement (généralement en moins d'une heure) avec des commentaires clairs en un seul endroit. Une fois que votre AMI a été scannée avec succès, soumettez-la pour traitement par l'équipe chargée des opérations AWS Marketplace vendeurs en téléchargeant votre formulaire de chargement de produit. 

## Étape 7 : Soumettez votre CloudFormation produit avec une AMI et une application sans serveur
<a name="cloudformation-serverless-application-procedure-step-7"></a>

Gardez présent à l'esprit l'élément suivant avant de soumettre votre produit :
+ Vous devez fournir un schéma architectural pour chaque modèle. Le diagramme doit utiliser les icônes AWS du produit pour chaque AWS service déployé via le CloudFormation modèle. Le diagramme doit également inclure les métadonnées des services. Pour télécharger nos icônes d' AWS architecture officielles, consultez la section [Icônes AWS d'architecture](https://aws.amazon.com/architecture/icons).
+ L'estimation des coûts d'infrastructure pour chaque modèle présenté aux acheteurs est basée sur une estimation que vous fournissez à l'aide du [calculateur de AWS prix](https://calculator.s3.amazonaws.com/index.html). Dans l'estimation, incluez la liste des services à déployer dans le cadre du modèle, ainsi que les valeurs par défaut pour un déploiement typique.
+ Remplissez le formulaire de chargement du produit. Vous pouvez trouver le formulaire de chargement du produit dans Portail de gestion AWS Marketplace. Un formulaire de chargement de produit différent est requis pour les produits AMI uniques et les produits AMI multiples. Dans le formulaire de chargement du produit, vous fournirez une URL publique vers votre CloudFormation modèle. CloudFormation les modèles doivent être soumis sous la forme d'une URL publique.
+ Utilisez le Portail de gestion AWS Marketplace pour soumettre votre annonce. Dans **Assets (Ressources)**, choisissez **File upload (Chargement de fichier)**, attachez votre fichier, puis choisissez **Upload (Charger)**. Après réception de votre modèle et de vos métadonnées, nous AWS commençons à traiter votre demande.

Après avoir soumis votre offre, passez en AWS Marketplace revue et validez le formulaire de chargement du produit. En outre, AWS Marketplace régionalise les AMIs applications sans serveur, et met à jour le mappage régional de votre CloudFormation modèle en votre nom. En cas de problème, l'équipe chargée des opérations avec les AWS Marketplace vendeurs vous contactera par e-mail. 