我的管道卡住了

概述

WizTran Inc. 是一家想要颠覆运输行业的初创公司。 他们希望实现快速、可重复的发布周期,为客户提供新功能。 他们选择了 CloudFormation 进行基础设施部署和 AWS 代码套件为 CI/CD 提供的服务。 在最近的一次活动中,团队的一位 DevOps 工程师看到 CodePipeline 支持自定义操作。 它开辟了一系列可能性,团队对实施其中一些可能性感到兴奋。

  完成!

背景

AWS CodePipeline 包括许多操作,可帮助您为自动发布流程配置构建、测试和部署资源。 AWS CodePipeline 支持自定义操作,可以利用这些操作实现广泛的集成。 在当前的发布流程中,团队有兴趣创建触发 Lambda Function 的自定义操作。

你的任务

你的一名团队成员开始努力实施它,后来离开了组织。 一名新团队成员加入了您的团队并部署了基础架构。 但是,部署的基础架构无法正常工作。 事实证明,前任工程师没有将最新的代码提交到源代码存储库(所有更改都存储在本地)。 CodePipeline 执行在超时前持续运行 1 小时。 您的团队需要你帮助解决问题并进行修复。

入门

检查挑战的输出属性选项卡以获取出现问题的 CodePipeline 的名称。 CodePipeline 已经在运行(正在进行中)。

需要注意的事

-您可以按照以下步骤停止管道执行 -点击 CodePipeline 中的 “停止执行” 按钮。 -选择当前正在进行的执行 -选择 “停止并放弃” 选项。 -点击 “停止” 按钮。 -要在进行更改后触发管道,请点击 CodePipeline 中的 “发布更改” 按钮。

库存

-CodePipeline -Lambda 函数:作为自定义操作步骤添加到 CodePipeline 中-BrokenPipelineLambdaFunction -IAM 角色 -CodePipeline -Lambda 函数 -适用于 CodePipeline 的 S3 存储桶

任务验证

CodePipeline 将成功执行,任务将在几分钟内自动标记为已完成。 此外,您可以随时通过点击挑战详情部分中的 “检查我的进度” 按钮来查看自己的进度。

使用的服务

CodePipeline、S3 存储桶、Lambda 函数、API Gateway

线索

惩罚: 15 点

线索 1:正在开始

与 Lambda 函数关联的 IAM 角色需要权限才能将结果发布到 CodePipeline。 Lambda 函数被命名为 BrokenPipelineLambdaFunction。 IAM 角色名称可以从 Lambda 控制台的 “权限” 选项卡中获取。 此角色缺少必要的权限。

惩罚: 19 点

线索 2:还有一个提示

Lambda 函数代码需要更新,才能将成功或失败结果提供给 CodePipeline。

下面列出了需要添加到代码中的 API:

把成功结果

import boto3

cp_client = boto3.client('codepipeline')

cp_client.put_job_success_result(jobId=event['CodePipeline.job']['id'])

放失败结果

import boto3

cp_client.put_job_failure_result(  

jobId=event['CodePipeline.job']['id'], failureDetails={'message': str(e), 'type': 'JobFailed'})

惩罚: 22 点

线索 3:完成演练

更新 IAM 权限

有两种方法可以更新 Lambda 函数 IAM 角色:

-添加内联策略 -选择 IAM 角色,然后单击 Add inline policy。 -选择 JSON 选项卡并将内容替换为以下内容:

    {

        "Version": "2012-10-17",

        "Statement": [{

            "Sid": "VisualEditor0",

            "Effect": "Allow",

            "Action": [

                "codepipeline:PutJobFailureResult",

                "codepipeline:PutJobSuccessResult"

            ],

            "Resource": "*"

        }]

    }

-点击页面底部的 “查看政策” 按钮。 -为策略添加名称,然后单击 “创建策略”。 -附加现有的托管 IAM 策略:AWSCodePipelineCustomActionAccess。下面列出了步骤: -选择 IAM 角色,然后单击 “附加策略” 按钮。 -在搜索栏中搜索 AWSCodePipelineCustomActionAccess。 -选择生成的 IAM 策略,然后单击右下角的 “附加策略” 按钮。

更新 Lambda 函数源代码

用以下代码替换 Lambda 代码。Lambda 函数名称是 BrokenPipelineLambdaFunction。

import ssl

import os

import json

import boto3

from urllib.request import urlopen

cp_client = boto3.client('codepipeline')

ssl._create_default_https_context = ssl._create_unverified_context

def lambda_handler(event, context):

    url = os.getenv('API_URL')

    try:

        status_code = urlopen(url).getcode()

        print(status_code)

        cp_client.put_job_success_result(jobId=event['CodePipeline.job']['id'])

        return {

            'statusCode': status_code,

            'body': "Completed Lambda execution successfully"

        }

    except Exception as e:

        print(f'Error occurred - {str(e)}')

        cp_client.put_job_failure_result(

            jobId=event['CodePipeline.job']['id'],

            failureDetails={'message': str(e), 'type': 'JobFailed'})

        return {

            'statusCode': 500,

            'body': "Lambda execution completed. Internal error occurred"

        }

触发管道

做出这两项更改后,重新触发管道。 如果它已经在运行,请先停止它。 挑战详情部分详细介绍了启动(和停止)CodePipeline 的步骤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值