code: func (f *GetAttFunc) UnmarshalJSON(data []byte) error {
  	v := struct {
  		FnGetAtt []string `json:"Fn::GetAtt"`
  	}{}
  	if err := json.Unmarshal(data, &v); err != nil {
  		return err
  	}
  	if len(v.FnGetAtt) != 2 {
  		return &json.UnsupportedValueError{Str: string(data)}
  	}
  	f.Resource = v.FnGetAtt[0]
  	f.Name = v.FnGetAtt[1]
  	return nil
  }
docs: // UnmarshalJSON sets the object from the provided JSON representation