读取AWS Config通知的正确结构是什么?

时间:2018-07-21 22:53:09

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果只想解组而不是反过来,可以省略struct标记(例如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"`
}