首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Go SDK检查AWS数据管道的状态

用Go SDK检查AWS数据管道的状态
EN

Stack Overflow用户
提问于 2017-09-12 11:32:08
回答 1查看 548关注 0票数 1

情境:我有两个按需运行的数据管道.管道B在A管线完成之前无法运行。我试图在一个脚本/程序中自动运行这两个管道,但我不知道如何在Go中实现这一切。

我有一些Go代码可以激活数据管道:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func awsActivatePipeline(pipelineID, region string) (*datapipeline.ActivatePipelineOutput, error) {
    svc := datapipeline.New(session.New(&aws.Config{Region: aws.String(region)}))
    input := &datapipeline.ActivatePipelineInput{
        PipelineId: aws.String(pipelineID),
    }
    result, err := svc.ActivatePipeline(input)
    if err != nil {
        fmt.Println("error activating pipeline: ", err)
    }
    fmt.Println(result)
    return result, nil
}

激活后,我希望能够监视该管道,并确定它何时完成,以便能够运行第二个管道。类似于list-runs命令,但我不确定对应的Go函数是什么。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ aws datapipeline list-runs --region us-west-2 --pipeline-id df-EXAMPLE
       Name                                                Scheduled Start      Status                 
       ID                                                  Started              Ended              
---------------------------------------------------------------------------------------------------
   1.  EC2ResourceObj                                      2017-09-12T17:49:55  FINISHED               
       @EC2ResourceObj_2017-09-12T17:49:55                 2017-09-12T17:49:58  2017-09-12T17:56:52

   2.  Installation                                        2017-09-12T17:49:55  FINISHED               
       @Installation_@ShellCommandActivityObj_2017-09-12T  2017-09-12T17:49:57  2017-09-12T17:54:09

   3.  S3OutputLocation                                    2017-09-12T17:49:55  FINISHED               
       @S3OutputLocation_2017-09-12T17:49:55               2017-09-12T17:49:58  2017-09-12T17:54:50

   4.  ShellCommandActivityObj                             2017-09-12T17:49:55  FINISHED               
       @ShellCommandActivityObj_2017-09-12T17:49:55        2017-09-12T17:49:57  2017-09-12T17:54:49

因此,一旦所有的动作被标记为‘完成’,我想激活我的第二个管道。做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 09:40:15

如果其他人遇到这种情况,我就是这样解决这个问题的:

Golang调用来描述数据管道的对象/操作,如果所有对象都完成了,则返回true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    func awsDescribeObjects(pipelineID, region string, objects []string) bool {
        var r Object
        var s []string
        var f bool
        svc := datapipeline.New(session.New(&aws.Config{Region: aws.String(region)}))
        input := &datapipeline.DescribeObjectsInput{
            PipelineId: aws.String(pipelineID),
            ObjectIds:  aws.StringSlice(objects),
        }
        result, err := svc.DescribeObjects(input)
        if err != nil {
            fmt.Println("error describing pipeline objects: ", err)
            f = false
            return f
        }
        //fmt.Println("original result: ", result)
        result2 := re.ReplaceAllString(result.String(), `"$1"$2`) //add "" around keys
        result3 := re1.ReplaceAllString(result2, `$3$2`)          //remove key and string/ref value from fields struct
        result4 := strings.Replace(result3, "@", "", -1)          //remove @ from keys and values
        result5 := re2.ReplaceAllString(result4, `$1$3$5$7$9`)    //remove "" from timestamps
        result6 := re3.ReplaceAllString(result5, `$1,`)           // remove {} from fields struct
        json.Unmarshal([]byte(result6), &r)
        // fmt.Printf("R: %+v\n", r)
        p := r.PipelineObjects
        // fmt.Printf("P: %+v\n", p)
        for i := range p {
            for m := range p[i].Fields {
                fmt.Printf("%v STATUS: %v\n", p[i].Name, p[i].Fields[m].Status)
                s = append(s, p[i].Fields[m].Status)
                if p[i].Fields[m].Status != "FINISHED" {
                    f = false
                } else {
                    f = true
                }
            }
            // fmt.Println("bool: ", f)
        }
        return f
    }

我的主要围棋功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    func main() {
        if *action == "describe" {
            obj := strings.Split(*object, ",")

            for i := 0; i <= 20; i++ {
                f := awsDescribeObjects(*pipeline, *region, obj)
                fmt.Printf("%v - Status Check %v - Finished?: %v\n", time.Now(), i, f)
                if f == true {
                    fmt.Println("FINISHED describing pipeline complete")
                    break
                }
                time.Sleep(5 * time.Minute)
                if i == 20 {
                    fmt.Println("TIME OUT - describe pipeline timed out, max time reached")
                    os.Exit(1)
                }
            }
        }
    }

具有go可执行文件的Shell脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#PIPELINE 1
echo "Starting Pipeline 1..."
echo ./runpipeline.linux -region $REGION1 -pipeline-id $PIPELINEID1 -action activate
echo sleep 1m
echo ./runpipeline.linux -region $REGION1 -pipeline-id $PIPELINEID1 -action describe -object ShellCommandActivityObj
echo "Pipeline 1 complete"
#PIPELINE 2
echo "Starting Pipeline 2..."
echo ./runpipeline.linux -region $REGION2 -pipeline-id $PIPELINEID2 -action activate
echo sleep 1m
echo ./runpipeline.linux -region $REGION2 -pipeline-id $PIPELINEID2 -action describe -object ShellCommandActivityObj,CliActivity
echo "Pipeline 2 complete"
echo "FINISHED"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46184057

复制
相关文章
java——调用方法交换两个数的值
而利用Java的调用方法来交换两个数字的值,没有那么直接,我们需要用到数组这个引用类型,才能在方法中实现两个数字的交换。
小雨的分享社区
2022/10/26
8210
java——调用方法交换两个数的值
交换两个数的值的方法(三种)
采用中间变量C,来承接a的值,再将a的值设置为b,最后将中间变脸c的值设置到b中。
ha_lydms
2023/08/09
1740
Python判断两个单词的相似度
本文要点在于算法的设计:如果两个单词中不相同的字母足够少,并且随机选择几个字母在两个单词中具有相同的前后顺序,则认为两个单词是等价的。 目前存在的问题:可能会有误判。 from random import sample, randint def oneInAnother(one, another): '''用来测试单词one中有多少字母不属于单词another''' return sum((1 for ch in one if ch not in another)) def testPositions(
Python小屋屋主
2018/04/16
1.6K0
jQuery.html()方法ie下不能设置html代码的问题
jQuery一般来说还是很好用的,但有时候它也会有些问题的,比如jQuery的html()方法设置html代码,在一种情况下,ie6、ie7、ie8 下是不能设置html代码的。本文说的问题只针对ie8(包括ie8)以下的浏览器。   1.什么情况下IE6、IE7、IE8 jQuery.html("xxx")方法会设置不上html代码?   答:当被加载的的html代码里面出现以下情况,ie8(包括ie8)以下是设置不上html代码的:     a) 被设置的html代码中包含引用其他js的,如:<scr
磊哥
2018/05/08
1.9K0
多种方法快速交换两个变量的值
# 使用多种方法快速交换两个变量的值 1、利用元组的快速交换变量值 2、引入新的变量来交换 3、使用加减法交换变量值 4、利用元组从一个函数中返回两个不同的值 # 代码 # 1. 利用元组的快速交换变量值 a = 5 b = 8 a, b = b, a print(a, b) # 2. 引入新的变量来交换 c = b b = a a = c print(a, b) # 3. 使用加减法交换变量值 a = a + b b = a - b a = a - b print(a, b) # 4. 利用元组
benym
2022/07/14
5620
Java List的get方法
List的get方法是Java的集合框架中常用的一个方法,用于获取List集合中指定位置的元素。
很酷的站长
2023/10/20
6050
Java List的get方法
php 中file_get_contents超时问题的解决方法
最近开发遇到一个file_get_contents超时的问题,主要是因为访问腾讯服务器导致php脚本超时,下面我来总结file_get_contents超时问题的解决方法总结 1.创建一个可以控制的资源句柄,通过控制资源句柄超时来控制file_get_contents超时时间 $context = stream_context_create( array( 'http' => array( 'timeout' => 3000 //超时时间,单位为秒
joshua317
2018/04/16
2.7K0
【html】referrer值的设置小记
当html页面中引入跨域的资源时(image,js,css等),可在html的header中加上
一朵灼灼华
2022/08/05
5.8K0
找出两个文件中相同的单词(java实现)
第二种比较单词的方法:将string【】数组转换成集合,通过集合的retainAll()方法 两个集合取交集
崔笑颜
2020/08/24
1.7K0
Visual Studio 中两个窗体(WinForm)之间相互传值的方法
编写WinowsForm应用程序时,实现两个窗体之间相互传递值的方法其实很简单。以下用一个例子说明:在名为FormMain主窗体运行过程中利用名为FormInfo窗体,获取用户输入信息,并将这些信息返回给FormMain
zls365
2021/04/23
2.3K0
Visual Studio 中两个窗体(WinForm)之间相互传值的方法
问题 1505: [蓝桥杯][算法提高VIP]单词个数统计
题目描述 编写一个程序,输入一个字符串(长度不超过80),然后统计出该字符串当中包含有多少个单词。例如:字符串“this is a book”当中包含有4个单词。
且陶陶
2023/04/12
4750
16.动态路由传值和get传值
1.动态路由传值  1.在components目录下新建vContent.vue组件 <template> <div> <h2>{{msg}}</h2> </div> </template> <script> export default { data () { return { msg:'详情组件', } }, methods:{ }, mounted(){ console.log(this
玩蛇的胖纸
2019/10/21
1.6K0
go get超时的网络问题
可以肯定是网络的问题,但是排查网络ping都是ok的,也能越“墙”;go env的设置也是ok的:
DifficultWork
2021/02/19
1.8K0
Visual Studio 中两个窗体(WinForm)之间相互传值的方法
编写WinowsForm应用程序时,实现两个窗体之间相互传递值的方法其实很简单。以下用一个例子说明:在名为FormMain主窗体运行过程中利用名为FormInfo窗体,获取用户输入信息,并将这些信息返回给FormMain
用户9127601
2021/11/01
1.8K0
get和post方法的区别
在form表单提交数据的过程中,method属性提供了两个值:get,post,默认为get方式[参1]
Hongten
2018/09/13
1.6K0
GET、POST编码问题
GET请求、POST经常会出现中文乱码的问题,最好约定前后端的编码,一般为UTF-8。但是这里面也是有坑的。 后端设置编码为UTF-8的推荐方式: SpringMVC配置过滤器: <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <ini
欠扁的小篮子
2018/07/04
6840
英文单词排序方法
List<String> words = new ArrayList<String>(); words.add("China"); words.add("Americal"); words.add("lafei"); words.add("lundom"); Collections.sort(words,new Comparator<String>() { public int compare(String o1, String o2) {
斯文的程序
2019/11/07
9550
点击加载更多

相似问题

获取用ajax AsyncFileUpload保存的文件的新文件名?

21

文件上传控件和Ajax AsyncFileUpload控件

20

Ajax控制工具包AsyncFileUpload文件上传控制

32

Ajax AsyncFileUpload.FileBytes返回null

35

本地化AsyncFileUpload(Ajax ControlToolkit)

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文