【问题标题】:Deploying Python Lambda Functions in AWS Codepipeline using AWS CDK使用 AWS CDK 在 AWS Codepipeline 中部署 Python Lambda 函数
【发布时间】:2021-04-08 13:46:43
【问题描述】:

所以我正在尝试使用 Amazon 在 Typescript 中的新云开发工具包通过 Codepipeline 部署一些 lambda 函数。问题是对于我的管道的构建阶段,docs 仅提供了一个示例,用于构建用 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],
            }),
          ],
        },
      ],
    });

【问题讨论】:

    标签: amazon-web-services aws-cdk


    【解决方案1】:

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

    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,
              },
    });
    

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 2020-10-07
      • 1970-01-01
      • 2016-09-20
      • 2019-12-06
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      相关资源
      最近更新 更多