【问题标题】:CICD in AWS - GitHub to LambdaAWS 中的 CICD - GitHub 到 Lambda
【发布时间】:2021-10-08 17:27:52
【问题描述】:

我正在尝试构建一个支持下面列出的非常简单的流程的 CICD 管道。我试图在 AWS 中完成这一切(即避免使用 GitHub Actions),我不想手动压缩或传输任何东西。

目标进程:

  1. Git 将代码推送到 GitHub 存储库。
  2. AWS 更新现有 Lambda 函数中的代码并相应地更新 $latest 别名。

目前的进展

我已经能够将 AWS CodePipeline 链接到 GitHub。当代码被推送到存储库时,管道会触发并且包含来自 GitHub 的内容的压缩文件被添加到 S3 存储桶中。

从长远来看,我可能会对部署前和部署后的测试、批准等感兴趣......但现在我只想要一个如上所述的简单设置。

挑战

现在我在 S3 中有这个压缩文件,我无法理解如何实际更新 Lamda 函数。我在 CodeDeloy 管道中尝试了各种构建/部署的东西,但我得到了各种错误。我什至不完全确定这整个方法是否是完成我想做的事情的最佳方式?!

  1. 这是实施此类 CICD 管道的有效方法吗?如果不是,请提出替代方案并说明您认为它更好的理由。
  2. 如何自动从压缩的 S3 文件中获取代码并将其放入 Lambda 函数?

感谢您的帮助! 理查德

【问题讨论】:

    标签: amazon-web-services github aws-lambda aws-codepipeline cicd


    【解决方案1】:

    您可以做的是在您的存储库中包含一个 AWS SAM (CloudFormation) 模板。然后,您可以在构建步骤中使用 AWS SAM 的构建/打包步骤,这将创建一个 packaged.yaml CloudFormation 模板。然后,此模板可用于 CloudFormation 部署操作。

    这是设置此类流程的 CloudFormation 模板的一部分,为简洁起见省略了一些内容:

    
      CodeBuildProject:
        Type: AWS::CodeBuild::Project
        Properties:
            Name: codebuildproject
            Description: Package and Deploy
            Artifacts:
              Type: CODEPIPELINE
            Environment:
                Type: LINUX_CONTAINER
                ComputeType: BUILD_GENERAL1_SMALL
                Image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
                EnvironmentVariables:
                  - Name: IAC_BUCKET
                    Type: PLAINTEXT
                    Value: !Sub iac-${AWS::Region}-${AWS::AccountId} # Bucket needed for SAM deployment
            ServiceRole: !Ref CodeBuildServiceRole
            Source:
              Type: CODEPIPELINE
              BuildSpec: |
                version: 0.2
                phases:
                  install:
                    runtime-versions:
                      python: 3.8
                    commands:
                      - 'pip install --upgrade --user aws-sam-cli'
                  build:
                    commands:
                      - sam build
                      - sam package --s3-bucket $IAC_BUCKET --output-template-file packaged.yaml
                artifacts:
                  files:
                    - 'packaged.yaml'
    
      Pipeline:
        Type: AWS::CodePipeline::Pipeline
        Properties:
          ArtifactStore:
            Location: !Sub "codepipeline-${AWS::Region}-${AWS::AccountId}"
            Type: S3
          Name: deployment-pipeline
          RoleArn: !GetAtt PipelineExecutionRole.Arn
          Stages:
            - Name: Source
              Actions:
                - YourGithubSourceAction
            - Name: Package
              Actions:
                - Name: SamPackage
                  ActionTypeId:
                    Category: Build 
                    Owner: AWS
                    Provider: CodeBuild 
                    Version: '1'
                  Configuration:
                    ProjectName: !Ref CodeBuildProject
                  InputArtifacts:
                    - Name: SourceZip
                  OutputArtifacts:
                    - Name: samArtifact
                  RunOrder: 1
            - Name: Deployment
              Actions:
                - Name: CreateChangeSet
                  ActionTypeId:
                    Category: Deploy 
                    Owner: AWS
                    Provider: CloudFormation 
                    Version: '1'
                  Configuration:
                    ActionMode: "CHANGE_SET_REPLACE"
                    ChangeSetName: !Sub "${ApplicationName}-${Environment}-changeset"
                    Capabilities: CAPABILITY_NAMED_IAM
                    StackName: your-stack-name
                    RoleArn: !GetAtt PipelineExecutionRole.Arn  
                    ParameterOverrides: !Sub '{ "Environment" : "${Environment}" }'
                    TemplatePath: 'samArtifact::packaged.yaml'
                  InputArtifacts:
                    - Name: samArtifact
                  RunOrder: 1
                - Name: ExecuteChangeSet
                  ActionTypeId:
                    Category: Deploy 
                    Owner: AWS
                    Provider: CloudFormation 
                    Version: '1'
                  Configuration:
                    ActionMode: CHANGE_SET_EXECUTE
                    ChangeSetName: !Sub ${ApplicationName}-${Environment}-changeset
                    StackName: your-stack-name
                  RunOrder: 2
    

    如果您不熟悉 AWS SAM,请务必查看它以了解所有可能性以及如何构建您的模板本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-01
      • 2019-10-14
      • 2022-01-20
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 2020-12-20
      • 2017-07-13
      相关资源
      最近更新 更多