繁体   English   中英

使用 AWS CDK 在 AWS Codepipeline 中部署 Python Lambda 函数

[英]Deploying Python Lambda Functions in AWS Codepipeline using AWS CDK

因此,我尝试使用亚马逊在 Typescript 中的新云开发工具包通过 Codepipeline 部署一些 lambda 功能。 问题是对于我的管道的构建阶段, 文档仅提供了一个示例,用于构建用 typescript 编写的 lambda 函数。 我知道这对于在构建规范方面更有经验的人来说可能是一个简单的问题,但我想知道是否有人可以为我提供 Python lambdas 的等效构建规范。

我在下面粘贴了定义我要创建的管道的代码。 cdkBuild 工作正常,但我无法为安装、预构建和使用 lambdaBuild 的构建规范构建正确的命令。

const cdkBuild = new codebuild.PipelineProject(this, 'CdkBuild', {
      buildSpec: codebuild.BuildSpec.fromObject({
        version: '0.2',
        phases: {
          install: {
            commands: 'npm install',
          },
          build: {
            commands: [
              'npm run build',
              'npm run cdk synth -- -o dist'
            ],
          },
        },
        artifacts: {
          'base-directory': 'dist',
          files: [
            'AdminStack.template.json',
          ],
        },
      }),
      environment: {
        buildImage: codebuild.LinuxBuildImage.STANDARD_2_0,
      },
    });

    const lambdaBuild = new codebuild.PipelineProject(this, 'LambdaBuild', {
      buildSpec: codebuild.BuildSpec.fromObject({
        version: '0.2',
        phases: {
          install: {
            commands: [
              /*'python3 -m venv .venv',
              'source .venv/bin/activate',*/
              'pip install -r requirements.txt -t lambda' 
            ],
          },
          build: {
            //commands: 'npm run build',
          },
        },
        artifacts: {
          'base-directory': 'lambda',
          files: [
            'admin/tutors/put.py ',
            'requirements.txt',
          ],
        },
      }),
      environment: {
        buildImage: codebuild.LinuxBuildImage.STANDARD_2_0,
      },
    });

    const sourceOutput = new codepipeline.Artifact();
    const cdkBuildOutput = new codepipeline.Artifact('CdkBuildOutput');
    const lambdaBuildOutput = new codepipeline.Artifact('LambdaBuildOutput');
    const pipeline = new codepipeline.Pipeline(this, 'BackendPipeline', {
      stages: [
        {
          stageName: 'Source',
          actions: [
            new codepipeline_actions.CodeCommitSourceAction({
              actionName: 'CodeCommit_Source',
              repository: code,
              output: sourceOutput,
            }),
          ],
        },
        {
          stageName: 'Build',
          actions: [
            new codepipeline_actions.CodeBuildAction({
              actionName: 'Lambda_Build',
              project: lambdaBuild,
              input: sourceOutput,
              outputs: [lambdaBuildOutput],
            }),
            new codepipeline_actions.CodeBuildAction({
              actionName: 'CDK_Build',
              project: cdkBuild,
              input: sourceOutput,
              outputs: [cdkBuildOutput],
            }),
          ],
        },
        {
          stageName: 'Deploy',
          actions: [
            new codepipeline_actions.CloudFormationCreateUpdateStackAction({
              actionName: 'AdminStack_CFN_Deploy',
              templatePath: cdkBuildOutput.atPath('AdminStack.template.json'),
              stackName: 'AdminStack',
              adminPermissions: true,
              parameterOverrides: {
                ...props.lambdaCode.assign(lambdaBuildOutput.s3Location),
              },
              extraInputs: [lambdaBuildOutput],
            }),
          ],
        },
      ],
    });

首先,您不需要使用虚拟环境。 如果您手动创建 lambda,那么工件应该是您上传的.zip中的内容,这是所需的库以及您自己的代码。 假设您所有的 python lambda 代码和 requirements.txt 在/lambda下,构建规范部分应如下所示:

codebuild.BuildSpec.fromObject({
            version: '0.2',
            phases: {
              build: {
                'pip install -r lambda/requirements.txt -t lambda'
              },
            },
            artifacts: {
              'base-directory': 'lambda',
              files: [
                '**/*'
              ],
            },
          }),
          environment: {
            buildImage: codebuild.LinuxBuildImage.STANDARD_2_0,
          },
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM