2 votes

Comment déployer vers plusieurs environnements en utilisant CodeCommit et Code Pipeline

J'utilise CodeCommit comme référentiel pour mon code, car CodeCommit vous permet de déployer votre code pour des comptes croisés dans un autre environnement. J'ai configuré une fonction lambda dans mon environnement QA dans le template.yaml en utilisant AWS SAM.

Où dois-je définir les variables d'environnement dans le pipeline de code pour que la fonction lambda puisse être déployée dans l'environnement Prod d'un autre compte ?

Comment puis-je définir les variables de façon à ce que lorsque la fonction lambda de staging est fusionnée sur l'environnement prod, elle prenne les variables de l'environnement prod ?

En effet, cela n'aurait aucun sens d'avoir les variables de l'environnement staging définies dans l'environnement prod lorsque le code est fusionné.

Les variables d'environnement seraient-elles définies dans le code-build ?

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: CD Demo Lambda
Resources:
  CDDemoLambda:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: ./LambdaCode
      FunctionName: ApigatewayLambda
      AutoPublishAlias: ApiLambda
      Description: 'Lambda function validation'
      MemorySize: 128
      Timeout: 30
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /getazs
            Method: get
      Environment:
        Variables:
          CONFIG_BUCKET: staging-bucket-name
          CONFIG_KEY: source-data-key-path

1voto

me2resh Points 446

Vous pouvez utiliser les paramètres et la fonctionnalité de condition dans Cloudformation pour le faire, par exemple, vous ajouterez une section de paramètre comme suit :

Parameters:
  Stage:
    Type: String
    Default: staging
    Description: Parameter for getting the deployment stage

puis une section de mappage avec une carte pour contenir les variables d'environnement pour toutes vos étapes.

Mappings:
  StagesMap:
    staging:
      CONFIG_BUCKET: staging-bucket-name
      CONFIG_KEY: source-data-key-path
    prod:
      CONFIG_BUCKET: prod-bucket-name
      CONFIG_KEY: source-data-key-path

alors votre fonction peut utiliser les variables en fonction de l'environnement dans lequel vous vous trouvez :

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: CD Demo Lambda
Resources:
  CDDemoLambda:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: ./LambdaCode
      FunctionName: ApigatewayLambda
      AutoPublishAlias: ApiLambda
      Description: 'Lambda function validation'
      MemorySize: 128
      Timeout: 30
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /getazs
            Method: get
      Environment:
        Variables:
          CONFIG_BUCKET: !FindInMap
            - StagesMap
            - Ref: Stage
            - CONFIG_BUCKET
          CONFIG_KEY: !FindInMap
            - StagesMap
            - Ref: Stage
            - CONFIG_KEY

Maintenant, lorsque vous appelez votre commande sam to deploy, vous devez définir l'étape vers laquelle vous allez déployer. ex :

sam deploy --parameter-overrides Stage=prod

Votre modèle complet de cloudformation doit ressembler à ceci :

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: CD Demo Lambda

Parameters:
  Stage:
    Type: String
    Default: staging
    Description: Parameter for getting the deployment stage

Mappings:
  StagesMap:
    staging:
      CONFIG_BUCKET: staging-bucket-name
      CONFIG_KEY: source-data-key-path
    prod:
      CONFIG_BUCKET: prod-bucket-name
      CONFIG_KEY: source-data-key-path

Resources:
  CDDemoLambda:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: ./LambdaCode
      FunctionName: ApigatewayLambda
      AutoPublishAlias: ApiLambda
      Description: 'Lambda function validation'
      MemorySize: 128
      Timeout: 30
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /getazs
            Method: get
      Environment:
        Variables:
          CONFIG_BUCKET: !FindInMap
            - StagesMap
            - Ref: Stage
            - CONFIG_BUCKET
          CONFIG_KEY: !FindInMap
            - StagesMap
            - Ref: Stage
            - CONFIG_KEY

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X