【问题标题】:what is the correct struct to read AWS Config notification?读取 AWS Config 通知的正确结构是什么?
【发布时间】:2018-12-29 20:07:14
【问题描述】:

我是新手,我必须使用 aws go sdk 从 SQS 读取 AWS Config 通知。 (AWS 配置服务 -> sns -> sqs) 我能够得到消息。但我想进入消息获取资源类型、resourceId、awsRegion 等信息。 这是我拥有的示例消息字符串(字符串化 json)。 https://gist.github.com/HarishAtGitHub/fcbb01515d11044d04bde14a3d9f6e7a

我来自python背景,在python中很容易做到,因为json就像一本字典。我们可以通过嵌套索引轻松获取。 但是在 go 中,我似乎应该使用正确的结构来理解这个消息。

有人可以为我指出正确的结构或关于如何在消息中获取不同属性的任何想法吗?

【问题讨论】:

    标签: amazon-web-services go aws-sdk


    【解决方案1】:

    我总是使用this 工具从 JSON blob 生成结构定义。您自己唯一需要做的就是为null 值选择一个类型:它显然无法确定这些值,因此将它们设置为interface{}(任何类型都实现了这一点)。

    如果您只想解组,则可以省略结构标签(例如json:"changeType"),而不是相反。

    type ConfigNotification struct {
        ConfigurationItemDiff struct {
            ChangedProperties struct {
            } `json:"changedProperties"`
            ChangeType string `json:"changeType"`
        } `json:"configurationItemDiff"`
        ConfigurationItem struct {
            RelatedEvents []interface{} `json:"relatedEvents"`
            Relationships []interface{} `json:"relationships"`
            Configuration struct {
                Attachments      []interface{} `json:"attachments"`
                AvailabilityZone string        `json:"availabilityZone"`
                CreateTime       time.Time     `json:"createTime"`
                Encrypted        bool          `json:"encrypted"`
                KmsKeyID         interface{}   `json:"kmsKeyId"`
                Size             int           `json:"size"`
                SnapshotID       string        `json:"snapshotId"`
                State            string        `json:"state"`
                VolumeID         string        `json:"volumeId"`
                Iops             int           `json:"iops"`
                Tags             []struct {
                    Key   string `json:"key"`
                    Value string `json:"value"`
                } `json:"tags"`
                VolumeType string `json:"volumeType"`
            } `json:"configuration"`
            SupplementaryConfiguration struct {
            } `json:"supplementaryConfiguration"`
            Tags struct {
                Creator string `json:"creator"`
            } `json:"tags"`
            ConfigurationItemVersion     string      `json:"configurationItemVersion"`
            ConfigurationItemCaptureTime time.Time   `json:"configurationItemCaptureTime"`
            ConfigurationStateID         int64       `json:"configurationStateId"`
            AwsAccountID                 string      `json:"awsAccountId"`
            ConfigurationItemStatus      string      `json:"configurationItemStatus"`
            ResourceType                 string      `json:"resourceType"`
            ResourceID                   string      `json:"resourceId"`
            ResourceName                 interface{} `json:"resourceName"`
            ARN                          string      `json:"ARN"`
            AwsRegion                    string      `json:"awsRegion"`
            AvailabilityZone             string      `json:"availabilityZone"`
            ConfigurationStateMd5Hash    string      `json:"configurationStateMd5Hash"`
            ResourceCreationTime         time.Time   `json:"resourceCreationTime"`
        } `json:"configurationItem"`
        NotificationCreationTime time.Time `json:"notificationCreationTime"`
        MessageType              string    `json:"messageType"`
        RecordVersion            string    `json:"recordVersion"`
    }
    

    【讨论】:

    • 嗨,它在我可以使用的 aws go sdk 中吗?
    • 这是一个不错的工具,但是如果我的 json 有不同的字段 tmrw 它会坏吗? .这就是为什么我要询问 aws sdk 本身是否有一个结构
    猜你喜欢
    • 2020-03-30
    • 2019-12-25
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多