本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions 和 Lambda 代理函数跨AWS账户启动 CodeBuild 项目
由 Richard Milner-Watts (AWS) 和 Amit Anjarlekar () 创作 AWS
代码库:跨账户 CodeBuild | 环境:生产 | 技术: DevOps;管理和治理;运营;无服务器 |
AWS服务:AWS CodeBuild; AWS Lambda; AWS Step Functions; X AWS-Ray; AWS CloudFormation |
Summary
此模式演示了如何使用 AWS Step Functions 和 Lamb AWS da 代理函数跨多个AWS账户异步启动AWS CodeBuild 项目。你可以使用模式的示例 Step Functions 状态机来测试你的 CodeBuild 项目是否成功。
CodeBuild 帮助您在完全托管的运行时环境中使用AWS命令行界面 (AWSCLI) 启动操作任务。您可以通过覆盖环境变量来更改 CodeBuild 项目在运行时的行为。此外,您还可以使用 CodeBuild 来管理工作流程。有关更多信息,请参阅AWS研讨会网站上的服务目录工具
先决条件和限制
先决条件
两个活跃AWS账户:一个用于通过 Step Functions 调用 Lambda 代理函数的源账户和一个用于构建远程示例项目的目标账户 CodeBuild
限制
此模式不能用于在账户之间复制构件。
架构
下图显示此模式构建的架构。
图表显示了以下工作流:
Step Functions 状态机解析提供的输入映射,并为您定义的每个账户、区域和项目调用 Lambda 代理函数 (
codebuild-proxy-lambda
)。Lambda 代理函数使用AWS安全令牌服务 (AWSSTS) 代入IAM代理角色 (
codebuild-proxy-role
),该角色与目标账户中的IAM策略 (codebuild-proxy-policy
) 关联。使用代入的角色,Lambda 函数启动 CodeBuild 项目并返回 CodeBuild 任务 ID。Step Functions 状态机循环并轮询 CodeBuild 作业,直到收到成功或失败状态。
状态机逻辑如下图所示。
技术堆栈
AWS CloudFormation
CodeBuild
IAM
Lambda
Step Functions
X-Ray
工具
AWS CloudFormation帮助您设置AWS资源,快速一致地配置资源,并在各个AWS账户和地区的整个生命周期中对其进行管理。
AWS CloudFormation Designer 提供了一个集成的JSONYAML编辑器,可帮助您查看和编辑 CloudFormation 模板。
AWS CodeBuild是一项完全托管的生成服务,可帮助您编译源代码、运行单元测试和生成可随时部署的工件。
AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。
AWSLambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
AWSSt ep Functions 是一项无服务器编排服务,可帮助您组合 Lam AWS bda 函数和其他AWS服务来构建关键业务应用程序。
AWSX-Ray 可帮助您收集有关您的应用程序所服务的请求的数据,并提供可用于查看、筛选和深入了解这些数据的工具,以确定问题和优化机会。
代码
此模式的示例代码可在 GitHub跨账户 CodeBuild 代理
最佳实践
调整 Step Function 状态机中的等待时间值,以最大限度地减少对作业状态的轮询请求。使用 CodeBuild 项目的预期执行时间。
在 Step Functions 中调整地图的
MaxConcurrency
属性以控制可以并行运行的 CodeBuild 项目数量。如有必要,请查看示例代码是否已准备就绪。考虑解决方案可能记录哪些数据,以及默认的 Amazon CloudWatch 加密是否足够。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
记录AWS账户IDs。 | AWS需要IDs使用账户才能设置跨账户的访问权限。 记录您的来源和目标账户的账户 ID。AWS有关更多信息,请参阅IAM文档中的查找您的AWS账户 ID。 | AWS DevOps |
下载AWS CloudFormation 模板。 |
注意:在AWS CloudFormation 模板中, | AWS DevOps |
创建并部署AWS CloudFormation 堆栈。 |
注意:在目标账户中创建任何资源之前,必须为代理 Lambda 函数创建AWS CloudFormation 堆栈。在目标账户中创建信任策略时,该IAM角色将从角色名称转换为内部标识符。这就是为什么该IAM角色必须已经存在的原因。 | AWS DevOps |
确认代理函数和状态机已创建。 |
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
创建并部署AWS CloudFormation 堆栈。 |
| AWS DevOps |
验证示例 CodeBuild 项目的创建。 |
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
启动状态机。 |
| AWS DevOps |
验证环境变量。 |
| AWS DevOps |
故障排除
问题 | 解决方案 |
---|---|
Step Functions 的执行时间比预期的要长。 | 在 Step Function 状态机中调整地图的 |
CodeBuild 任务的执行时间比预期的要长。 |
|